You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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,提问作者Сергей Севастьянов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:39:55