python中的pydantic是什么?

发布于:2025-07-03 ⋅ 阅读:(19) ⋅ 点赞:(0)

Pydantic 是 Python 中一个用于数据验证和设置管理的库,主要通过 Python 类型注解(Type Hints)来定义数据结构,并自动验证输入数据的合法性。它广泛应用于 API 开发(如 FastAPI)、配置管理、数据序列化等场景。


核心功能

  1. 数据验证
    自动检查输入数据是否符合类型和约束条件(如字符串长度、数字范围等)。
  2. 类型转换
    将原始数据(如 JSON、字典)转换为 Python 类型(如 datetimeEnum)。
  3. 序列化
    轻松将模型转换为字典或 JSON。
  4. IDE 友好
    配合类型提示,提供代码补全和错误检查。

基础用法示例

1. 定义一个数据模型
from pydantic import BaseModel, Field, EmailStr
from datetime import datetime

class User(BaseModel):
    id: int
    name: 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 validator

class Product(BaseModel):
    price: float

    @validator("price")
    def price_must_be_positive(cls, v):
        if v <= 0:
            raise ValueError("价格必须为正数")
        return v

Product(price=10.5)  # 正常
Product(price=-1)   # 抛出 ValueError
2. 嵌套模型
class Address(BaseModel):
    city: str
    street: str

class Company(BaseModel):
    name: str
    address: Address  # 嵌套模型

company = Company(name="DeepSeek", address={"city": "Hangzhou", "street": "Xihu"})
3. 动态模型(Settings 配置)
from pydantic_settings import BaseSettings

class AppSettings(BaseSettings):
    api_key: str
    debug: bool = False

    class Config:
        env_file = ".env"  # 从 .env 文件加载配置

settings = AppSettings()  # 自动读取环境变量

Pydantic 版本注意

  • Pydantic V1:旧版(如 pydantic<2.0),语法略有不同(如 .dict() 而非 .model_dump())。
  • Pydantic V2:新版(推荐),性能更好,功能更丰富。

安装最新版:

pip install pydantic pydantic-settings

常见应用场景

  1. API 请求/响应验证(如 FastAPI)
    from fastapi import FastAPI
    app = FastAPI()
    
    @app.post("/users")
    def create_user(user: User):  # 自动验证请求体
        return {"message": f"User {user.name} created"}
    
  2. 配置文件管理
    通过环境变量或文件加载配置。
  3. 数据管道
    确保输入数据符合预期格式。

与其他工具对比

工具 特点
Pydantic 基于类型注解,强调验证和序列化
Dataclasses 仅提供数据容器,无验证功能
Marshmallow 需显式定义 Schema,灵活性高但更冗长

Pydantic 的简洁性和强大功能使其成为 Python 生态中数据处理的标杆工具。


网站公告

今日签到

点亮在社区的每一天
去签到