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

Pydantic模块学习

Pydantic模块是Python中使用最广泛的数据验证库。

Pydantic具有如下特点:

  • 性能:Pydantic是Python中最快的数据验证库之一
  • 序列化:可以将Python对象序列化和反序列化为字典和JSON字符串
  • 强大的生态:在很多库中都用Pydantic
  • 定制化:Pydantic可以验证的数据类型几乎没有限制

1. 安装

可以通过pip 安装pydantic

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pydantic

此外还有几个可选的库值得安装:

  • pydantic[email] :用于对邮件地址进行验证
  • pydantic-settings :用于对系统配置进行验证
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pydantic[email]pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple pydantic-settings

2. 验证字段数据

Pydantic库具有多种方式验证数据

2.1 BaseModel方式

通过声明pydatic.BaseModel类的父类。在父类中通过对属性进行注解,实现数据验证效果。

from datatime import date
from uuid import UUID, uuid4
from enum import Enum
from pydantic import BaseModel, EmailStr# 定义Department枚举类型
class Department(Enum):HR = "HR"SALES = "SALES"IT = "IT"ENGINEERING = "ENGINEERING"# 定义需要进行数据验证的模型
class Employee(BaseModel):employee_id: UUID = uuid4()name: stremail: EmailStrdate_of_birth: datesalary: floatdepartment: Departmentelected_benefits: bool

当BaseModel父类中的属性注解时,表示该类的属性的数据类型应该是注解中的数据类型。如果注解中属性具有默认值,则表示该属性的值是可忽略的。

这种方式只能从如下几个方面限制数据类型:

  • 属性是否是必填的
  • 属性的数据类型是否满足定义

Pydantic库的工作原理

类在实例化的时候,会针对类声明中的属性注解进行验证,如果满足验证条件,这创建对应的实例对象;否则,产生ValidationError异常

# 可以正常创建的情况
employee = Employee(name = "Chris DeTuma",email = "ethan@example.com",date_of_birth = "2000-07-21",salary = 15000,department="IT",elected_benefits = True
)# 产生异常的情况
employee1 = Employee(employee_id = "123",name=False,email="ethan@example.com",date_of_birth="2000-07-21",department="IT",elected_benefits=True
)

2.2 Field方式

在数据验证的时候,如果除了对必填性和数据类型有要求外,对数据内容还有要求,此时可以通过Field方式进行设置。

Field方式定义每个属性的默认值,可以通过不同的参数,对该属性的内容进行限制。

</
Field的参数说明
default 定义字段参数的默认值,和default_factory只能二选一
default_factory 定义一个创建默认值的工厂方法名,可以动态进行默认值的设置。和default只能二选一
alias 定义字段参数的别名,可以在实例化或序列化时,使用这些别名
title 定义字段参数的标题,如果没有,则默认是字段属性的值
description 定义字段参数描述
exclude 表示模型序列化为JSON或dict时,转换结果中要排除此字段
frozen 设置该字段不可变。该字段创建后,其值不能更改
repr 在对象__repr__方法中是否隐藏
pattern 正则表达式
strict 定义该字段是否设置为严格模式
gt 大于某个float类型的值
ge 大于等于某个float类型的值
lt 小于某个float类型的值
le 小于等于某个float类型的值
http://www.xdnf.cn/news/16905.html

相关文章:

  • vivado扫盲:dcp(腾讯元宝)
  • QT6 源,十章绘图(2)画刷 QBrush:刷子只涉及填充颜色,线型,填充图片,以及变换矩阵这几个属性,附源代码带注释。
  • 从零到一:Linux内核MMU启动与虚拟内存体系建立全流程详解
  • gitlab+jenkins的ci/cd部署
  • win11 命令禁用客户体验改善计划
  • 区块链概述
  • 云计算k8s集群部署配置问题总结
  • ARM Cortex-M 处理器的应用
  • Hive SQL (HQL) 编辑指南
  • vscode cursor配置php的debug,docker里面debug
  • 20250801在Ubuntu24.04.2LTS下编译firefly_itx_3588j的Android12时解决boot.img过大的问题
  • django的数据库原生操作sql
  • PHP在现代Web开发中的应用与优势分析
  • ACS-电机控制Buffer-任意路径规划(PVSPLINE绘制圆形)
  • OCC任务新SOTA!华科提出SDGOCC:语义深度双引导的3D占用预测框架(CVPR 2025)
  • Shader开发(六)什么是着色器
  • SQL数据库连接Python实战:疫情数据指挥中心搭建指南
  • STM32 使用 RTC 实现实时时钟功能
  • 【BFS】P7555 [USACO21OPEN] Maze Tac Toe S|普及+
  • Java Map和Set
  • Redis 初识Redis
  • 校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
  • 逻辑回归在银行贷款审批中的应用:参数选择与实践
  • 《人形机器人的觉醒:技术革命与碳基未来》——类人关节设计:柔性驱动革命之液压人工肌肉
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • 利用 AI 在 iPhone 上实现 App 文本情绪价值评估(上)
  • 数据结构学习基础和从包装类缓存到泛型擦除的避坑指南
  • 九联UNT403HS_海思MV320处理器_安卓9-优盘强刷刷机包
  • 代码随想录算法训练营第三十八天
  • 【机器学习与数据挖掘实战 | 医疗】案例20:基于交叉验证和LightGBM算法的糖尿病遗传风险预测