Pydantic 基于类型注解实现数据验证,支持自动类型转换、序列化和结构化错误处理。
核心能力
| 能力 | 说明 |
|---|
| 数据验证 | 类型、格式、约束检查 |
| 自动转换 | JSON/dict → Python 类型 |
| 序列化 | 模型 ↔ JSON/dict |
| 错误处理 | 结构化错误信息 |
基础用法
1
2
3
4
5
6
7
8
| from pydantic import BaseModel, Field
class User(BaseModel):
id: int
name: str = Field(min_length=2, max_length=10)
email: str | None = None
user = User(id="123", name="Alice") # id 自动转 int
|
字段约束
1
2
3
4
| class Product(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(ge=0, le=10000) # 0 ≤ price ≤ 10000
tags: list[str] = Field(default_factory=list)
|
自定义验证器
1
2
3
4
5
6
7
8
9
10
11
| from pydantic import field_validator
class Product(BaseModel):
price: float
@field_validator("price")
@classmethod
def validate_price(cls, v):
if v <= 0:
raise ValueError("价格必须为正数")
return v
|
嵌套模型
1
2
3
4
5
6
7
8
9
| class Address(BaseModel):
city: str
street: str
class Company(BaseModel):
name: str
address: Address
company = Company(name="TechCorp", address={"city": "Beijing", "street": "Main St"})
|
FastAPI 集成
1
2
3
4
5
6
7
8
9
10
11
| from fastapi import FastAPI
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/")
async def create_item(item: Item):
return {"name": item.name, "price": item.price}
|
配置管理
1
2
3
4
5
6
7
8
9
10
| from pydantic_settings import BaseSettings
class Settings(BaseSettings):
api_key: str
debug: bool = False
class Config:
env_file = ".env"
settings = Settings()
|
V2 新语法
1
2
3
4
5
6
7
| # 序列化
user.model_dump() # → dict
user.model_dump_json() # → JSON string
# 反序列化
User.model_validate(data) # dict → model
User.model_validate_json(json_str) # JSON → model
|
工具对比
| 工具 | 优势 | 适用场景 |
|---|
| Pydantic | 类型注解集成、高性能 | API 验证、配置管理 |
| Marshmallow | 灵活自定义 Schema | 复杂序列化 |
| Dataclasses | 轻量级 | 无需验证的简单结构 |
Comments