【问题标题】:FastAPI & GINO can't get all rows from table in dbFastAPI & GINO 无法从数据库中的表中获取所有行
【发布时间】:2020-11-28 14:16:13
【问题描述】:

我遇到了 GINO 的问题。我可以从称为模板的表中获取一行,因此在另一条路线中,我想从表中获取所有行。在这里您可以看到我的观点,即从 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" = $1

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

请告诉我出了什么问题,我花了很多时间来解决这个问题。欢迎回答,谢谢。

【问题讨论】:

    标签: python orm fastapi starlette gino


    【解决方案1】:

    但是我不知道。并且 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2016-09-14
      • 2019-02-22
      • 2017-04-30
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多