【Python】Pydantic多字段映射到一个字段

背景

在开发过程中,由于上游数据结构不确定,或者数据结构确定,但大部分相同,部分字段不同(含义相同的情况)

如有时上游给到数据叫【id】,有时叫【code】,为了兼容这种情况,减少coding,我们可以通过Pydantic来解决该问题。

解决方案

旧版本处理方案

python 复制代码
class Foo(BaseModel):
    id: int =Field(..., alias="item_id")
    field1: str
    ...
    
    class Config:
        allow_population_by_field_name = True
# 结果验证
Foo.parse_obj({"item_id": 123, "field1": "value1"})
Foo.parse_obj({"id": 234, "field1": "value1"})

新版本处理方案

参考官方

python 复制代码
class Foo(BaseModel):
    id: int =Field(..., alias="item_id")
    field1: str
    ...
    
    class Config:
        populate_by_name = True

# 或者
class Foo(BaseModel):
    model_config = ConfigDict(populate_by_name=True)
    id: int =Field(..., alias="item_id")
    field1: str
    ...
# 结果验证
Foo.model_validate({"item_id": 123, "field1": "value1"})
Foo.model_validate({"id": 234, "field1": "value1"})
相关推荐
人工智能AI技术17 分钟前
【Agent从入门到实践】43 接口封装:将Agent封装为API服务,供其他系统调用
人工智能·python
Darkershadow1 小时前
蓝牙学习之Time Set
python·学习·蓝牙·ble·mesh
m0_736919102 小时前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
学习中的DGR2 小时前
[极客大挑战 2019]Http 1 新手解题过程
网络·python·网络协议·安全·http
布茹 ei ai2 小时前
Python屏幕监视器 - 自动检测屏幕变化并点击
开发语言·python
天天睡大觉2 小时前
Python学习12
网络·python·学习
程序员杰哥3 小时前
性能测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
人工智能AI技术3 小时前
【Agent从入门到实践】42实战:用Docker打包Agent,实现一键部署
人工智能·python
开发者小天4 小时前
python中的class类
开发语言·python
idwangzhen4 小时前
GEO优化系统哪家更专业
python·信息可视化