特点
由类型提示提供支持
使用Pydantic,模式验证和序列化由类型注释控制;学习更少,编写更少的代码,以及与IDE和静态分析工具的集成。
Speed
Pydantic的核心验证逻辑是用Rust编写的。因此,Pydantic是Python中速度最快的数据验证库之一。
JSON模式
Pydantic模型可以发出JSON模式,从而可以轻松地与其他工具集成。
Strict和Lax模式
Pydantic可以在Strict=True模式(其中数据不转换)或Strict=False模式下运行,其中Pydantic试图在适当的情况下将数据强制转换为正确的类型。
dataclass、TypedDicts等
Pydantic支持验证许多标准库类型,包括dataclass和TypedDict。
自定义
Pydantic允许自定义验证器和序列化程序以许多强大的方式更改数据的处理方式。
生态系统
PyPI上大约有8000个包使用Pydantic,包括非常流行的库,如FastAPI、huggingface、Django Ninja、SQLModel和LangChain。
参数的验证
Pydantic提供多种类型的验证器功能:
After validators
在Pydantic的内部解析之后运行。它们通常更为类型安全,因此更易于实现。
Before validators
在Pydantic的内部解析和验证(例如,将str强制为int)之前运行。它们比After验证器更灵活,因为它们可以修改原始输入,但也必须处理原始输入,理论上原始输入可以是任何任意对象。
Plain validators
普通验证器就像一个mode='before’验证器,但它们会立即终止验证,不会调用进一步的验证器,Pydantic也不会进行任何内部验证。
Wrap validators
Wrap验证器是所有验证器中最灵活的。您可以在Pydantic和其他验证器执行任务之前或之后运行代码,也可以立即终止验证,无论是成功值还是错误。
具体用法见这里
序列化
面向对象
常用的序列化装饰器有:
@field_serializer
@model_serializer
PlainSerializer
WrapSerializer
面向函数
model.model_dump(…
model.model_dump_json(…)¶
dict(model) and iteration¶
具体用法见这里
常见用法
class TradeSave(BaseModel):
network: str
hash: str
sender: str
receiver: str
value: float | None = None
block: int
published_at: datetime
type: str
content: Dict[Optional[str], dict | list | str] | None = {}
@field_validator('published_at')
@classmethod
def validate_timestamp(cls, value):
if not value:
return None
if isinstance(value, str):
return datetime.fromisoformat(value)
return value