您将如何使用带有 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?