【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"})
相关推荐
寒秋丶15 分钟前
AutoGen多智能体协作、人机交互与终止条件
人工智能·python·microsoft·ai·人机交互·ai编程·ai写作
Turnsole_y23 分钟前
pytest与Selenium结合使用指南
开发语言·python
AI量化投资实验室1 小时前
年化398%,回撤11%,夏普比5,免费订阅,5积分可查看参数|多智能体的架构设计|akshare的期货MCP代码
人工智能·python
夫唯不争,故无尤也2 小时前
AI调度框架全解析:从通用到LLM专用
python·大模型·调用框架
wudl55662 小时前
Python 虚拟环境和包管理
数据库·python·sqlite
Geoking.4 小时前
PyTorch torch.unique() 基础与实战
人工智能·pytorch·python
俊俊谢4 小时前
【第一章】金融数据的获取——金融量化学习入门笔记
笔记·python·学习·金融·量化·akshare
闲人编程5 小时前
现代Python开发环境搭建(VSCode + Dev Containers)
开发语言·vscode·python·容器·dev·codecapsule
nvd116 小时前
python异步编程 -- 深入理解事件循环event-loop
python
chenchihwen6 小时前
AI代码开发宝库系列:Text2SQL深度解析基于LangChain构建
人工智能·python·langchain·text2sql·rag