【问题标题】:How would you use asyncpg with FastAPI to map returned values from a select query to pydantic models for output and validation?您将如何使用带有 FastAPI 的 asyncpg 将选择查询的返回值映射到 pydantic 模型以进行输出和验证?
【发布时间】:2026-02-17 05:50:01
【问题描述】:

我想在没有 ORM 的情况下使用 FastAPI(使用 asyncpg)并将返回值从选择查询映射到 pydantic 模型。这样,返回的值将通过 pydantic 进行验证,并且返回的响应的结构类似于 pydantic 模型/模式。

我曾尝试寻找这方面的文档,但很难找到/不清楚。如有任何帮助,我将不胜感激!

【问题讨论】:

    标签: python-3.x fastapi pydantic asyncpg


    【解决方案1】:

    每个 pydantic 模型inherits a couple of utility helpers to create objects。一个是parse_obj,它接受一个字典并从中创建模型对象。

    parse_obj:这与模型的__init__ 方法非常相似,除了它需要一个字典而不是关键字参数。如果传递的对象不是字典,则会引发 ValidationError。

    来自上面链接部分的示例:

    class User(BaseModel):
        id: int
        name = 'John Doe'
        signup_ts: datetime = None
    
    
    m = User.parse_obj({'id': 123, 'name': 'James'})
    print(m)
    #> id=123 signup_ts=None name='James'
    

    你也许可以直接给parse_obj 一个记录,因为它实现了类似字典的访问器,所以试试看它是否有效。如果没有,您可以使用dict(<row record from asyncpg>) 将记录转换为实际的字典。

    【讨论】:

    • 谢谢!在大多数情况下,我现在可以进行映射和验证。在响应模型方面,我仍在研究一个奇怪的副作用,因为它显示了输出模型中的所有字段与指定字段(根据文档:fastapi.tiangolo.com/tutorial/response-model
    最近更新 更多