微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 fastAPI 显示来自 SqlAlchemy Query 的列表数据

如何解决如何使用 fastAPI 显示来自 SqlAlchemy Query 的列表数据

所以,我一直在尝试使用 fastAPI 学习 Python 全栈 Web 开发。我的大部分网站都可以正常工作,但我无法使用 FASTAPI 发送查询列表。

我收到此错误

{
  "detail": [
    {
      "loc": [
        "path","id"
      ],"msg": "value is not a valid integer","type": "type_error.integer"
    }
  ]
}

这是我的 FastAPI 路由器代码

@router.get("/get/all",response_model=List[ComicViewable])
def list_of_all_comics(db: Session = Depends(get_db)):
    comics = comic_func.list_comics(db)
    if not comics:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND,detail="No Comics have been created.")
    return comics

这是返回存储在数据库中的所有漫画列表的函数

def list_comics(db: Session):
    return db.query(Comic).all()

和我的 pydantic 响应类

class ComicViewable(BaseModel):
    title: str
    description: str
    date_created: date
    is_ongoing: bool
    is_public: bool

    class Config:
        orm_mode = True

我不知道我在这里做错了什么。我已经阅读了 FASTAPI 帮助文档,在那里他们还使用 List[PydanticclassName] 返回数据库查询列表,但由于某种原因,它对我不起作用。

编辑: 所以,我检查了 list_comics() 函数的响应。它确实返回了正确的响应。我通过在 Jinja2 模板中打印 comic.title 来测试它。

{% block content %}
<div class="ui segment">
    <div class="two column middle aligned grid">
        {% for comic in comics %}
        <h2>{{comic.title}}</h2>
        {% endfor %}
    </div>
</div>
{% endblock %}

因此错误似乎发生在 pydantic 类模型FastAPI 路由器中。

解决方法

@MatsLindh 建议的这个解决方案解决了它。

那不是正在加载的端点;错误消息抱怨带有 id 设置的端点(即 /get/{id} 或类似的东西)。您可能在 /get/all 端点之前定义了该端点,并且由于 all 不是整数,因此会引发给定的错误。

这解决了我的问题,因为我在名为 /get/all/get/{id} 端点之前有另一个端点,这导致了错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。