如何在FastAPI中查询并返回Pydantic模型(SQLAlchemy场景)
将SQLAlchemy元组查询结果转换为Pydantic对象
1. 定义对应Pydantic模型
先创建仅包含所需字段的Pydantic响应模型:
from pydantic import BaseModel class SomethingResponse(BaseModel): age: int status: bool class Config: orm_mode = True # 兼容ORM对象解析,也支持元组/字典转换
2. 转换查询结果
下面是两种实用的转换方式:
方式一:直接遍历元组实例化Pydantic对象
执行查询后,逐个将元组字段映射到Pydantic模型属性:
# 执行查询并获取所有结果 query_results = db.query(Something.age, Something.status)\ .filter(Something.user_id.in_([1, 2, 3]))\ .order_by(desc(Something.an_id))\ .all() # 转换为Pydantic对象列表 pydantic_objects = [SomethingResponse(age=item[0], status=item[1]) for item in query_results]
方式二:用命名字段简化转换
通过给查询字段添加别名,让结果返回命名元组,再通过字典解析快速实例化:
# 添加字段别名,返回命名元组 query_results = db.query( Something.age.label("age"), Something.status.label("status") )\ .filter(Something.user_id.in_([1, 2, 3]))\ .order_by(desc(Something.an_id))\ .all() # 命名元组可直接转为字典,传递给Pydantic模型 pydantic_objects = [SomethingResponse(**dict(item)) for item in query_results]
内容的提问来源于stack exchange,提问作者Jose Kaithakkary
相关产品推荐
相关产品推荐

