FastAPI查询数据库返回单条数据时Pydantic校验报错如何解决?
错误原因
你代码的核心问题出在get_entity函数的返回值上:调用filter_by(id=id)之后没有执行查询取结果,返回的是SQLAlchemy的未执行查询对象,而非单条Userentity实例,所以Pydantic在按照schemas.Userentity校验响应的时候找不到对应的字段,才会报所有字段缺失的验证错误。
你第一个返回用户列表的接口可以正常运行,是因为get_entities函数最后调用了.all()执行查询,返回了实际的模型实例列表,单条查询需要调用.first()获取匹配的单条记录。
修复方案
- 首先修改crud层的
get_entity函数,执行查询返回实际结果:
def get_entity(db: Session, id: str): # 新增.first()执行查询,返回匹配的单条用户实例,无匹配时返回None return db.query(models.Userentity).filter_by(id=id).first()
- 建议在接口层补充用户不存在的异常处理,避免请求无效id时仍然触发Pydantic校验错误:
from fastapi import HTTPException @app.get("/entity/{id}", response_model=schemas.Userentity) def read_entity(id: str, db: Session = Depends(get_db)): user = crud.get_entity(db, id=id) if not user: raise HTTPException(status_code=404, detail="对应用户不存在") return user
内容的提问来源于stack exchange,提问作者Data Mastery
相关产品推荐
相关产品推荐

