当前位置: 首页 > news >正文

python中的pydantic是什么?

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 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

常见应用场景

  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 生态中数据处理的标杆工具。

http://www.lryc.cn/news/579177.html

相关文章:

  • 逆向入门(25、26)程序逆向篇-KeygenMe,MexeliteCRK1
  • Linux基本命令篇 —— alias命令
  • MIT协议开源CRM系统:打造高效客户关系管理解决方案
  • 【Vue入门学习笔记】项目的创建与基础认识
  • 存储过程封装:复杂业务逻辑的性能优化
  • 基于 TOF 图像高频信息恢复 RGB 图像的原理、应用与实现
  • 监测检测一体化项目实践——整体功能规划
  • 物联网实战:多语言(Java、Go、Rust、C++、C#、Rust)设备接入与数据处理
  • macOS挂载iOS应用沙盒文件夹
  • TikTok电商广告重大调整:GMVmax全面取代传统广告模式
  • iOS 集成RN Installing glog (0.3.5)报错的解决方案
  • 【echarts】解决 ECharts 图表模糊问题的实践心得:单条数据时字体颜色灰蒙蒙的, 图例失真, 字体模糊问题解决
  • 闲庭信步使用SV搭建图像测试平台:第二十六课——图像的二值化
  • 2-RuoYi-UI管理平台的启动
  • 幸狐RV1106开发板从SD卡启动自己的busybox1.36.1根文件系统
  • 【WPF】外部引用样式
  • 基于Apache POI实现百度POI分类快速导入PostgreSQL数据库实战
  • vscode vim配置
  • 【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
  • 【Erdas实验教程】026:遥感图像辐射增强(去条带处理)
  • Qt 5.9 XML文件写入指南
  • JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
  • 无人机一机多控技术的核心要点
  • 设计模式(八)
  • 【前端】1 小时实现 React 简历项目
  • 【Python】Python / PyCharm 虚拟环境详搭建与使用详解
  • MidJourney生成秦朝末年刘邦全身像提示词
  • RabbitMQ 高级特性之持久性
  • 二叉搜索树中第k小的元素
  • R Studio开发中记录