FastAPI 和 GINO 无法从数据库中的 table 获取所有行
FastAPI & GINO can't get all rows from table in db
我遇到了 GINO 的问题。我可以从我的 table 调用模板中获取一行,所以在另一条路径中我想从 table 中获取所有行。在这里你可以看到我对从 db ant 获取一条记录的看法,它工作得很好。
@router.get("/templates/{uid}")
async def get_template(uid: str):
temp = await Template.get_or_404(uid)
return temp.to_dict()
接下来你可以看看我的视图,将记录添加到数据库,它也可以正常工作:
@router.post("/templates")
async def add_template(template: TemplateModel):
rv = await Template.create(name=template.name, text=template.text)
return rv.to_dict()
所以,这个观点的主要原因,是行不通的:
@router.get("/templates/all")
async def get_all_templates():
temp = await Template.all()
return temp.to_dict()
在下面查看我的模板模型:
class Template(db.Model):
__tablename__ = "templates"
UUID = db.Column(
str(UUID(as_uuid=True)),
db.String,
primary_key=True,
default=str(uuid.uuid4()),
unique=True,
nullable=False,
)
name = db.Column("name", db.String, nullable=False)
text = db.Column("text", db.String, nullable=False)
created_at = db.Column("created_at", db.DateTime, nullable=False,
server_default=db.func.now())
最后是我的 db GINO 引擎:
from gino_starlette import Gino
from .. import config
db = Gino(
dsn=config.DB_DSN,
pool_min_size=config.DB_POOL_MIN_SIZE,
pool_max_size=config.DB_POOL_MAX_SIZE,
echo=config.DB_ECHO,
)
错误日志:
2020-08-08 12:07:57,698 INFO gino.engine._SAEngine SELECT templates."UUID", templates.name, templates.text, templates.created_at
FROM templates
WHERE templates."UUID" =
2020-08-08 12:07:57,699 INFO gino.engine._SAEngine ('all',)
INFO: 172.23.0.1:40676 - "GET /templates/all HTTP/1.1" 404 Not Found
请告诉我哪里出了问题,我花了很多时间来解决这个问题。欢迎回答,谢谢。
不过我不知道。并且 GINO 文档没有说明使用 GINO 模型的 db 操作(例如从 db 获取所有记录)应该在 POST 中请求。所以正确答案是将 router.get 替换为 router.post:
@router.post("/templates/all")
async def get_all_templates():
temp = await Template.all()
return temp.to_dict()
我遇到了 GINO 的问题。我可以从我的 table 调用模板中获取一行,所以在另一条路径中我想从 table 中获取所有行。在这里你可以看到我对从 db ant 获取一条记录的看法,它工作得很好。
@router.get("/templates/{uid}")
async def get_template(uid: str):
temp = await Template.get_or_404(uid)
return temp.to_dict()
接下来你可以看看我的视图,将记录添加到数据库,它也可以正常工作:
@router.post("/templates")
async def add_template(template: TemplateModel):
rv = await Template.create(name=template.name, text=template.text)
return rv.to_dict()
所以,这个观点的主要原因,是行不通的:
@router.get("/templates/all")
async def get_all_templates():
temp = await Template.all()
return temp.to_dict()
在下面查看我的模板模型:
class Template(db.Model):
__tablename__ = "templates"
UUID = db.Column(
str(UUID(as_uuid=True)),
db.String,
primary_key=True,
default=str(uuid.uuid4()),
unique=True,
nullable=False,
)
name = db.Column("name", db.String, nullable=False)
text = db.Column("text", db.String, nullable=False)
created_at = db.Column("created_at", db.DateTime, nullable=False,
server_default=db.func.now())
最后是我的 db GINO 引擎:
from gino_starlette import Gino
from .. import config
db = Gino(
dsn=config.DB_DSN,
pool_min_size=config.DB_POOL_MIN_SIZE,
pool_max_size=config.DB_POOL_MAX_SIZE,
echo=config.DB_ECHO,
)
错误日志:
2020-08-08 12:07:57,698 INFO gino.engine._SAEngine SELECT templates."UUID", templates.name, templates.text, templates.created_at
FROM templates
WHERE templates."UUID" =
2020-08-08 12:07:57,699 INFO gino.engine._SAEngine ('all',)
INFO: 172.23.0.1:40676 - "GET /templates/all HTTP/1.1" 404 Not Found
请告诉我哪里出了问题,我花了很多时间来解决这个问题。欢迎回答,谢谢。
不过我不知道。并且 GINO 文档没有说明使用 GINO 模型的 db 操作(例如从 db 获取所有记录)应该在 POST 中请求。所以正确答案是将 router.get 替换为 router.post:
@router.post("/templates/all")
async def get_all_templates():
temp = await Template.all()
return temp.to_dict()