您将如何使用带有 FastAPI 的 asyncpg 将选择查询的返回值映射到 pydantic 模型以进行输出和验证?

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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)

以上是关于您将如何使用带有 FastAPI 的 asyncpg 将选择查询的返回值映射到 pydantic 模型以进行输出和验证?的主要内容,如果未能解决你的问题,请参考以下文章

FastAPI - 如何在响应中使用 HTTPException?

带有用户名和角色的 FastAPI 发布请求,怎么做?

FastAPI,返回带有 sql 查询输出的 File 响应

Python:带有发布请求的 FastAPI 错误 422

带有 FastAPI 的 MongoDb

FastAPI websocket ping/pong 超时