当前位置: 首页 > 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.lryc.cn/news/607035.html

相关文章:

  • gis qgis验证 tif地图文件
  • 10年24倍的etf轮动策略复现,回测+实盘一体解决方案:backtrader的模块化策略模板,附python代码
  • 机器学习第二课之逻辑回归(二)LogisticRegression
  • Spring事件监听设计原理全面深入指南
  • 3D 管道如何实现流动的?
  • Java试题-选择题(3)
  • python简单操作达梦数据库
  • VUE2 学习笔记15 代理
  • Leetcode 10 java
  • Go语言中的盲点:竞态检测和互斥锁的错觉
  • 常见的网络攻击以及预防
  • C++ 构造函数语义学
  • Context API
  • 【AI论文】具备测试时扩散能力的深度研究者
  • win11怎么看本机ip地址?怎么查看代理端口?
  • leetcode 118. 杨辉三角 简单
  • 【C#学习Day14笔记】泛型、集合(数组列表Arraylist、列表list)与字典
  • 基于单片机汽车少儿安全预警系统
  • 118. 杨辉三角
  • 数据结构:在链表中查找(Searching in a Linked List)
  • [ java 网络 ] TPC与UDP协议
  • NTC热敏电阻的原理及应用
  • 8.1 开始新的学习历程
  • 应急响应(windows工具版)
  • Java文件读写I/O操作教程
  • Mysql group by
  • 【C++篇】C++11入门:踏入C++新世界的大门
  • 国内用户如何用手机进行YouTube直播?
  • 『React』 组件通信全攻略
  • 如何从头开始搭建属于自己的家用nas实现内网穿透访问