Pydantic:用 Python 类型提示做数据验证,27k+ Star

Pydantic 是一款基于 Python 类型提示的数据验证库,目前在 GitHub 上已经获得了 27,917 个 Star。

正文顶部截图

它的核心思路是用原生 Python 语法定义数据模型,运行时自动完成验证和类型转换。开发者写类的时候,通过类型注解声明字段规则,Pydantic 会在实例化时检查数据是否合规,不合规就报错。

README区域截图

Pydantic 支持 Python 3.10 及以上版本。设计上考虑了对 IDE 和类型检查器的友好性,模型定义时能获得自动补全和类型推断,跟写普通 dataclass 的体验接近。

Pydantic V2 于 2023 年发布,是一次从底层到接口的全面重写。核心验证逻辑用 Rust 实现,处理速度比 V1 有显著改善。V2 同时内置了 V1 兼容模式,存量项目可以渐进迁移,不需要一次性改动全部代码。

安装方式很常规:

pip install -U pydantic

conda 用户也可以这样安装:

conda install pydantic -c conda-forge

下面是一个基本用法示例:

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]

这个例子展示了 Pydantic 的几个特点。id 字段声明为 int,但传入的是字符串 '123',Pydantic 自动完成了类型转换。signup_tsOptional[datetime],传入日期字符串后转成 datetime 对象。friends 里的 b'3' 是 bytes 类型,也被转成整数。如果数据无法转换,Pydantic 会抛出 ValidationError,说明具体是哪个字段出了什么问题。

Pydantic 还支持嵌套模型。你可以把多个模型组合起来,验证复杂的多层数据结构。它也允许自定义验证器,在类型检查之外增加业务逻辑校验。

在 Python 生态中,Pydantic 被 FastAPI、SQLModel、LangChain 等项目作为底层依赖。这些项目选择 Pydantic,很大程度上是因为它能统一数据建模和验证流程,减少重复代码。

对于需要处理 API 请求、配置文件、数据库记录等外部输入的 Python 项目,Pydantic 是个值得考虑的工具。类型注解写在哪里,验证逻辑就自动跟到哪里,不需要额外维护一套校验规则。

dantic 是个值得考虑的工具。类型注解写在哪里,验证逻辑就自动跟到哪里,不需要额外维护一套校验规则。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐