Pydantic:Python 类型提示数据校验工具
pydantic/pydantic 在 GitHub 上已经拿到 27722 Star。 这是一个基于 Python 类型提示的数据校验库,运行速度快,扩展性强,兼容主流编辑器和 linter。开发者通过标准 Python 语法定义数据结构,即可用 Pydantic 完成校验。
核心能力
Pydantic 主要解决 Python 开发中的数据校验问题。传统方式下,开发者需要手动编写大量校验逻辑,处理数据类型转换、边界值判断等场景。Pydantic 基于类型提示自动完成这些工作,减少重复代码。
当前主流版本为 V2,是完全重写的版本,相比 V1 有明显性能提升,同时内置 V1 兼容层,支持项目增量升级。开发者可以通过 from pydantic import v1 as pydantic_v1 的方式同时使用两个版本的能力。
官方配套推出 Pydantic Logfire 工具,用于应用运行状态监控,与 Pydantic 生态形成完整链路。
安装方式
Pydantic 支持通过 pip 安装:
pip install -U pydantic
也可以通过 conda 安装:
conda install pydantic -c conda-forge
官方文档提供更多安装选项,可开启更高性能的运行模式。
使用示例
最简单的使用方式是继承 BaseModel 定义数据结构:
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str = 'John Doe'
signup_ts: Optional[datetime] = None
friends: list[int] = []
external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)
#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
#> 123
上述代码中,字符串类型的 '123' 会自动转换为 int 类型,时间字符串会转换为 datetime 对象,列表中的字符串和字节类型数字也会自动转换为 int 类型,无需手动处理。
适用场景
- 需要处理外部输入数据的 Web 后端服务,自动校验请求参数
- 数据处理 pipeline,统一各环节的数据结构标准
- 接口开发场景,减少参数校验相关的重复代码
- 需要兼容多版本数据结构的项目,利用类型提示明确数据定义