0

0

Python pydantic v2 的重大变更适配

舞夢輝影

舞夢輝影

发布时间:2026-02-15 15:53:10

|

526人浏览过

|

来源于php中文网

原创

pydantic v2 移除了 __root__,改用 rootmodel;field(default=none) 不再表示可选,需用 default=...;dict() 替换为 model_dump();@validator 升级为 @field_validator 和 @model_validator。

python pydantic v2 的重大变更适配

pydantic.BaseModel 不再支持 __root__ 字段

很多老项目用 __root__ 实现单值包装(比如只校验一个 strint),v2 直接删了这个机制。不是弃用警告,是运行时就报错:TypeError: __root__ is not supported in Pydantic v2

改法很简单:用 RootModel 替代。

  • 原写法:
    class Name(str, BaseModel):<br>    __root__: str
  • v2 正确写法:
    from pydantic import RootModel<br><br>class Name(RootModel[str]):<br>    pass
  • RootModelroot 属性就是那个单值,访问方式从 inst.__root__ 变成 inst.root
  • 注意:不能继承 BaseModel 同时定义 root 字段,会冲突

Field 默认值逻辑变了:None 不再等价于“未设置”

v1 里 Field(default=None) 表示字段可选、默认为 None;v2 里这会被当成显式设了默认值,导致该字段不再算“可选”,JSON Schema 里不会标 "nullable": true,OpenAPI 文档也容易出错。

真正想表达“可选且无默认值”,必须用 Field(default=...)(三个点)或 Field(default=None, default_factory=lambda: None) —— 但后者不推荐,语义不清。

AISEO
AISEO

AI创作对SEO友好的文案和文章

下载

立即学习Python免费学习笔记(深入)”;

  • ✅ 正确(可选,无默认值):name: str | None = Field(default=...)
  • ❌ 错误(变成必填,默认值为 None):name: str | None = Field(default=None)
  • 如果字段类型已是 Optional[str](即 str | None),又写了 default=...,它才是真正的可选;否则即使类型含 None,没配 default=... 就是必填

model_dump()dict() 彻底不兼容

v1 的 inst.dict() 在 v2 里已移除,直接调用会抛 AttributeError。替代方法是 inst.model_dump(),但它行为更严格:默认不包含 None 值字段(exclude_none=True),也不递归序列化嵌套模型(除非显式开 serialize_as_any=True)。

  • 要完全复刻 v1 的 dict() 行为,得写:inst.model_dump(exclude_unset=False, exclude_defaults=False, exclude_none=False)
  • 但多数场景不需要这么宽松 —— 比如 FastAPI 返回响应时,默认 model_dump() 就够用;手动调试才需要展开所有字段
  • 顺带一提:model_dump_json() 是新接口,别再用 json.dumps(inst.dict()),那会漏掉自定义序列化逻辑

验证器写法迁移:从 @validator@field_validator@model_validator

@validator 装饰器在 v2 完全失效,连 import 都会报错。新机制拆得更细:字段级用 @field_validator,整个模型级用 @model_validator,而且签名、参数名、执行时机都有调整。

  • 旧写法:
    @validator('age')<br>def check_age(cls, v): ...
  • 新写法:
    @field_validator('age')<br>def check_age(cls, v): ...
    (函数签名不变,但装饰器名和 import 路径变了)
  • 注意:v2 中 @field_validator 默认在类型转换后执行,如果想在原始输入上校验(比如字符串长度),得加参数 mode='before'
  • @model_validator(mode='before') 用来处理整个输入字典,适合做字段间依赖校验,但别在里面改 values 字典 —— 应该返回新字典
v2 的类型提示约束更硬,字段声明里混用 Optional[T]Union[T, None] 可能触发奇怪的解析失败;还有 validate_assignment=True 的行为变化,这些细节不写进字段定义、只靠文档很难发现。改的时候最好打开 pydantic.warnings 日志,把 warning 当 error 处理。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

440

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

318

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

27

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

178

2026.02.06

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

327

2023.10.25

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

139

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号