FastAPI+Pydantic创建用户时出现ValidationError的原因排查
问题原因与解决方案
核心问题
你遇到的ValidationError是因为Pydantic版本不兼容:如果你的环境使用的是Pydantic V2(Python 3.11通常会搭配较新的Pydantic版本),但代码中仍沿用了Pydantic V1的orm_mode=True配置项,导致SQLAlchemy的ORM对象无法被正确序列化为Pydantic模型,FastAPI生成响应时找不到所需字段,从而抛出缺失字段的错误。
具体修复步骤
替换Pydantic配置项
将schemas.py中所有orm_mode=True替换为from_attributes=True,这是Pydantic V2中开启ORM模式的正确方式:class UserCreate(_UserBase): password: str class Config: from_attributes=True # 替换原orm_mode=True class User(_UserBase): id:int projects: List["Project"] = [] class Config: from_attributes=True # 替换原orm_mode=True移除冗余字段定义
UserCreate继承自_UserBase,已经包含username、email、access字段,无需重复定义,可简化代码:class UserCreate(_UserBase): password: str class Config: from_attributes=True
验证逻辑
修改后,当services.py返回SQLAlchemy的db_user对象时,Pydantic V2会通过from_attributes=True正确读取ORM对象的属性,生成符合User schema的响应,不会再出现字段缺失的错误。
内容的提问来源于stack exchange,提问作者Aiyo28
相关产品推荐
相关产品推荐

