Pydantic 是 Python 中一個用于數據驗證和設置管理的庫,主要通過 Python 類型注解(Type Hints)來定義數據結構,并自動驗證輸入數據的合法性。它廣泛應用于 API 開發(如 FastAPI)、配置管理、數據序列化等場景。
核心功能
- 數據驗證
自動檢查輸入數據是否符合類型和約束條件(如字符串長度、數字范圍等)。 - 類型轉換
將原始數據(如 JSON、字典)轉換為 Python 類型(如datetime
、Enum
)。 - 序列化
輕松將模型轉換為字典或 JSON。 - IDE 友好
配合類型提示,提供代碼補全和錯誤檢查。
基礎用法示例
1. 定義一個數據模型
from pydantic import BaseModel, Field, EmailStr
from datetime import datetimeclass User(BaseModel):id: intname: str = Field(min_length=2, max_length=10) # 約束字符串長度email: EmailStr # 自動驗證郵箱格式signup_time: datetime | None = None # 可選字段# 使用示例
user_data = {"id": 123,"name": "Alice","email": "alice@example.com","signup_time": "2024-01-01T12:00:00"
}user = User(**user_data) # 自動驗證和轉換
print(user)
# 輸出:id=123 name='Alice' email='alice@example.com' signup_time=datetime.datetime(2024, 1, 1, 12, 0)
2. 驗證失敗時的錯誤處理
try:User(id=1, name="A", email="invalid-email")
except Exception as e:print(e)
# 輸出:
# 1 validation error for User
# email
# value is not a valid email address (type=value_error.email)
3. 序列化為字典或 JSON
user_dict = user.model_dump() # 轉為字典
user_json = user.model_dump_json() # 轉為 JSON 字符串
高級特性
1. 自定義驗證器
from pydantic import validatorclass Product(BaseModel):price: float@validator("price")def price_must_be_positive(cls, v):if v <= 0:raise ValueError("價格必須為正數")return vProduct(price=10.5) # 正常
Product(price=-1) # 拋出 ValueError
2. 嵌套模型
class Address(BaseModel):city: strstreet: strclass Company(BaseModel):name: straddress: Address # 嵌套模型company = Company(name="DeepSeek", address={"city": "Hangzhou", "street": "Xihu"})
3. 動態模型(Settings
配置)
from pydantic_settings import BaseSettingsclass AppSettings(BaseSettings):api_key: strdebug: bool = Falseclass Config:env_file = ".env" # 從 .env 文件加載配置settings = AppSettings() # 自動讀取環境變量
Pydantic 版本注意
- Pydantic V1:舊版(如
pydantic<2.0
),語法略有不同(如.dict()
而非.model_dump()
)。 - Pydantic V2:新版(推薦),性能更好,功能更豐富。
安裝最新版:
pip install pydantic pydantic-settings
常見應用場景
- API 請求/響應驗證(如 FastAPI)
from fastapi import FastAPI app = FastAPI()@app.post("/users") def create_user(user: User): # 自動驗證請求體return {"message": f"User {user.name} created"}
- 配置文件管理
通過環境變量或文件加載配置。 - 數據管道
確保輸入數據符合預期格式。
與其他工具對比
工具 | 特點 |
---|---|
Pydantic | 基于類型注解,強調驗證和序列化 |
Dataclasses | 僅提供數據容器,無驗證功能 |
Marshmallow | 需顯式定義 Schema,靈活性高但更冗長 |
Pydantic 的簡潔性和強大功能使其成為 Python 生態中數據處理的標桿工具。