【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"})
相关推荐
m0_748554814 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
smj2302_796826524 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
阿正呀5 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
2501_901200535 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
_.Switch5 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
Mr_sst5 小时前
Claude Code 部署与使用保姆级教程(2026 最新)
python·ai
瞎某某Blinder6 小时前
DFT学习记录[6]基于 HES06的能带计算+有效质量计算
python·学习·程序人生·数据挖掘·云计算·学习方法
m0_495496416 小时前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
forEverPlume7 小时前
PHP怎么使用Eloquent Attribute Composition属性组合_Laravel通过组合构建复杂属性【方法】
jvm·数据库·python
Aleeeeex7 小时前
RAG 那点事:从 8 份企业文档到能用的问答系统,全过程拆给你看
人工智能·python·ai编程