文章目录Pydantic用 Python 类型注解做数据验证核心用法为什么成为主流实际应用场景需要注意什么Pydantic用 Python 类型注解做数据验证在 Python 生态中做数据验证Pydantic 几乎是默认选项。这个项目目前积累了 27,935 个 Star被 FastAPI、SQLModel、LangChain 等大量知名项目直接依赖。它的核心定位很简单利用 Python 原生的类型注解让数据校验和类型转换变得直观、可维护。核心用法写一个数据模型只需要继承 BaseModel字段类型用标准 Python 类型标注。传入数据时Pydantic 会自动检查类型把字符串转成整数把日期字符串转成 datetime 对象。类型不匹配时报错告诉你具体是哪个字段出了问题。fromdatetimeimportdatetimefromtypingimportOptionalfrompydanticimportBaseModelclassUser(BaseModel):id:intname:strJohn Doesignup_ts:Optional[datetime]Nonefriends:list[int][]external_data{id:123,signup_ts:2017-06-01 12:22,friends:[1,2,b3]}userUser(**external_data)这段代码会正常执行因为 Pydantic 会自动把 ‘123’ 转成整数把日期字符串转成 datetime把 bytes 转成整数。如果传入的值完全无法转换它会抛出 ValidationError定位到具体字段和错误原因。这种报错信息对调试很友好。为什么成为主流Pydantic 流行的原因有几个。第一它充分利用了 Python 3.10 的类型系统。你写的类型注解既是 IDE 和类型检查器的输入也是运行时的验证规则。一份代码同时服务开发和运行两个场景不需要为验证单独写一套逻辑。第二验证逻辑可扩展。你可以自定义字段验证器、自定义序列化规则、自定义错误信息。Pydantic V2 还引入了更灵活的验证器 API复杂业务场景下也能应付。第三性能好。Pydantic V2 用 Rust 重写了核心验证引擎验证速度相比 V1 有数量级提升。对处理大量请求的 Web 服务来说这点差异很实在。第四生态广泛。FastAPI 用它做请求参数校验和响应模型SQLModel 基于它做 ORMLangChain 用它定义模型输入输出。学一个库能在多个场景复用。实际应用场景最常见的用法是和 FastAPI 配合。FastAPI 的路由函数直接用 Pydantic 模型定义请求参数请求进来时自动校验校验失败自动返回 422 错误响应。开发者几乎不用写额外的验证代码。配置文件解析是另一个高频场景。用 Pydantic 模型定义配置结构配合环境变量或 YAML 文件加载时自动类型转换和校验。配置写错了会在启动时就暴露出来而不是运行到一半才报错。API 响应数据清洗、表单数据校验、CLI 工具参数解析等场景也都能用上。只要是需要把外部数据转成结构化 Python 对象的地方Pydantic 都合适。安装也简单pip install pydantic 即可。Conda 用户可以用 conda install pydantic -c conda-forge。需要注意什么Pydantic 要求你对 Python 类型注解有一定了解。如果项目还在用旧版本 Python或者团队不熟悉类型系统上手会有门槛。极度复杂的嵌套验证规则写起来会稍微繁琐。比如涉及多个字段交叉验证的场景需要写自定义验证器代码量会增加。不过这类需求在常规项目中并不常见。另外Pydantic V2 和 V1 的 API 有不小差异。老项目迁移时需要适配好在 V2 内置了 V1 兼容层可以渐进式升级。总体来说Pydantic 是一个成熟、稳定、生态广泛的数据验证工具。如果你用 Python 做 Web 开发或数据处理它值得放进工具箱。tic 是一个成熟、稳定、生态广泛的数据验证工具。如果你用 Python 做 Web 开发或数据处理它值得放进工具箱。
Pydantic:用 Python 类型注解做数据验证
文章目录Pydantic用 Python 类型注解做数据验证核心用法为什么成为主流实际应用场景需要注意什么Pydantic用 Python 类型注解做数据验证在 Python 生态中做数据验证Pydantic 几乎是默认选项。这个项目目前积累了 27,935 个 Star被 FastAPI、SQLModel、LangChain 等大量知名项目直接依赖。它的核心定位很简单利用 Python 原生的类型注解让数据校验和类型转换变得直观、可维护。核心用法写一个数据模型只需要继承 BaseModel字段类型用标准 Python 类型标注。传入数据时Pydantic 会自动检查类型把字符串转成整数把日期字符串转成 datetime 对象。类型不匹配时报错告诉你具体是哪个字段出了问题。fromdatetimeimportdatetimefromtypingimportOptionalfrompydanticimportBaseModelclassUser(BaseModel):id:intname:strJohn Doesignup_ts:Optional[datetime]Nonefriends:list[int][]external_data{id:123,signup_ts:2017-06-01 12:22,friends:[1,2,b3]}userUser(**external_data)这段代码会正常执行因为 Pydantic 会自动把 ‘123’ 转成整数把日期字符串转成 datetime把 bytes 转成整数。如果传入的值完全无法转换它会抛出 ValidationError定位到具体字段和错误原因。这种报错信息对调试很友好。为什么成为主流Pydantic 流行的原因有几个。第一它充分利用了 Python 3.10 的类型系统。你写的类型注解既是 IDE 和类型检查器的输入也是运行时的验证规则。一份代码同时服务开发和运行两个场景不需要为验证单独写一套逻辑。第二验证逻辑可扩展。你可以自定义字段验证器、自定义序列化规则、自定义错误信息。Pydantic V2 还引入了更灵活的验证器 API复杂业务场景下也能应付。第三性能好。Pydantic V2 用 Rust 重写了核心验证引擎验证速度相比 V1 有数量级提升。对处理大量请求的 Web 服务来说这点差异很实在。第四生态广泛。FastAPI 用它做请求参数校验和响应模型SQLModel 基于它做 ORMLangChain 用它定义模型输入输出。学一个库能在多个场景复用。实际应用场景最常见的用法是和 FastAPI 配合。FastAPI 的路由函数直接用 Pydantic 模型定义请求参数请求进来时自动校验校验失败自动返回 422 错误响应。开发者几乎不用写额外的验证代码。配置文件解析是另一个高频场景。用 Pydantic 模型定义配置结构配合环境变量或 YAML 文件加载时自动类型转换和校验。配置写错了会在启动时就暴露出来而不是运行到一半才报错。API 响应数据清洗、表单数据校验、CLI 工具参数解析等场景也都能用上。只要是需要把外部数据转成结构化 Python 对象的地方Pydantic 都合适。安装也简单pip install pydantic 即可。Conda 用户可以用 conda install pydantic -c conda-forge。需要注意什么Pydantic 要求你对 Python 类型注解有一定了解。如果项目还在用旧版本 Python或者团队不熟悉类型系统上手会有门槛。极度复杂的嵌套验证规则写起来会稍微繁琐。比如涉及多个字段交叉验证的场景需要写自定义验证器代码量会增加。不过这类需求在常规项目中并不常见。另外Pydantic V2 和 V1 的 API 有不小差异。老项目迁移时需要适配好在 V2 内置了 V1 兼容层可以渐进式升级。总体来说Pydantic 是一个成熟、稳定、生态广泛的数据验证工具。如果你用 Python 做 Web 开发或数据处理它值得放进工具箱。tic 是一个成熟、稳定、生态广泛的数据验证工具。如果你用 Python 做 Web 开发或数据处理它值得放进工具箱。