如何用Pydantic验证SQLAlchemy查询结果及解决返回报错
问题解决方案
你的错误根源在于接口定义的响应模型与实际返回数据类型不匹配:
- 接口的
response_model设为了单个LanguageModelResponse,但函数实际返回的是该模型的列表List[LanguageModelResponse],FastAPI收到列表后尝试按单个模型验证,因此抛出错误。
步骤1:修正响应模型定义
将response_model改为列表类型,需先从typing导入List:
from typing import Optional, List from fastapi import status, Depends, APIRouter # 其他必要导入... @router.get("/get_in_list/", status_code=status.HTTP_200_OK, response_model=List[LanguageModelResponse]) async def get_language_list( label: Optional[str], session: AsyncSession = Depends(get_db), ) -> List[LanguageModelResponse]: """ Получение списка языков(фильтр по label) """ stmt = select(LanguageModel) if label is not None: stmt = stmt.where(LanguageModel.label.ilike(f"%{label}%")) query = (await session.execute(stmt)).scalars().all() return [LanguageModelResponse.model_validate(row) for row in query]
步骤2:如果需要返回字典列表(可选)
若确实需要将模型实例转为字典返回,可修改返回语句:
return [LanguageModelResponse.model_validate(row).model_dump() for row in query]
同时需将response_model调整为List[Dict[str, Any]](需导入Dict和Any),不过通常直接返回模型实例更符合FastAPI最佳实践,框架会自动处理序列化。
内容的提问来源于stack exchange,提问作者Сергей Севастьянов
相关产品推荐
相关产品推荐

