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

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.dtcms.com/a/309057.html

相关文章:

  • TDengine 中 TDgp 中添加机器学习模型
  • AT6668B芯片说明书
  • unity学习——视觉小说开发(一)
  • 51单片机入门:模块化编程
  • 用 TensorFlow 1.x 快速找出两幅图的差异 —— 完整实战与逐行解析 -Python程序图片找不同
  • forceStop流程会把对应进程的pendingIntent给cancel掉
  • ceph 14.2.22 nautilus Balancer 数据平衡
  • 通过CISSP考试,共答到第127题
  • 雷达微多普勒特征代表运动中“事物”的运动部件。
  • 机械手弧焊电源气体流量优化方法
  • 算法:分治-快速排序
  • IO流File类的基本使用
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第二天(CSS)
  • 《n8n基础教学》第三节:模拟一个自动化场景
  • CSS的2D转换
  • 【Shell脚本自动化编写——报警邮件,检查磁盘,web服务检测】
  • 了解Reddit自动化 社区营销更精准
  • CSS组件化样式新篇章:@scope
  • vi/vim跳转到指定行命令
  • 机器学习第二课之逻辑回归(二)LogisticRegression
  • LSTM网络从浅入深原理级讲解与Pytorch逐行讲解实现
  • [python][selenium] Web UI自动化8种页面元素定位方式
  • K8S周期性备份etcd数据实战案例
  • 番茄项目3:完成了项目的数据库设计
  • npm报错:npm install 出现“npm WARN old lockfile”
  • ZED 2/2i 相机安装与调试完整指南 | Ubuntu 20.04 + CUDA 11.8
  • k8s云原生rook-ceph pvc快照与恢复(下)
  • 前端SWR策略:优化数据请求
  • STM32学习记录--Day5
  • AG-UI 协议全面解析--下一代 AI Agent 交互框架医疗应用分析(下)