Pydantic如何分离field和alias
问题分析#
即假如需要返回的是:
{ "isStar": ture }
在python中一般不使用isStar
这种命名方式, 所以我们需要使用别名定义模型:
class TestModel(BaseCategoryModel): is_star: bool = Field(..., alias="isStar")
而且在SQLAlchemy
中也要定义相关字段, 也是由于命名的习惯性, 定义为:
class Test(Base): __tablename__ = 'Test' is_star = Column(Boolean, nullable=False, default=False, comment="是否星标"
但是假如我们直接让Pydantic
从ORM中读取数据的话, 会报错, 原因也很简单
问题解决#
TestModel
这个模型接收和输出的都是别名后的字段, 即isStar
而Test
这个表中没有该字段, 所以会报错!
也就是说, 只需要我们让Pydantic
输出isStar
但接收的是is_star
, 不就完美解决了吗!
为此我去Github上看了一下Issues: #2429, 发现了一个差不多的issue, 然后看了一下官方文档:
发现了allow_population_by_field_name
配置( 在v1.0
之前是allow_population_by_alias
), 该配置为: 别名字段是否可以 由模型属性给出的名称以及别名填充
所以修改后的TestModel
模型为:
class TestModel(BaseCategoryModel): is_star: bool = Field(..., alias="isStar") class Config: orm_mode = True allow_population_by_field_name = True
如此便可以让TestModel
接收is_star
而返回的是isStar
作者:忞翛
出处:https://www.cnblogs.com/lczmx/p/15904536.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
欢迎各位大佬评论交流。可以的话,不妨点一下推荐。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!