python常用库之数据验证库pydantic

文章目录

  • python常用库之pydantic
    • 什么是Pydantic
      • “为什么 Pydantic 是这样命名的?”
      • 为什么使用 Pydantic?
    • 安装 Pydantic
    • 工作常用
      • BaseModel
      • ConfigDict
      • model_validator

python常用库之pydantic

官方文档:https://docs.pydantic.dev/latest/
Pydantic 官方文档:https://pydantic.com.cn/

什么是Pydantic

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

Pydantic 会检查传入的数据类型是否符合定义的类型。例如,如果某个属性被定义为 int,而用户传入了一个字符串,Pydantic 会抛出一个错误,确保数据的正确性。

“为什么 Pydantic 是这样命名的?”

“Pydantic”这个名字是“Py”和“pedantic”的混合词。“Py”部分表示该库与 Python 相关,而“pedantic”指的是该库在数据验证和类型强制方面的细致方法。

综合这些元素,“Pydantic”描述了我们的 Python 库,它提供了注重细节、严格的数据验证。

我们意识到具有讽刺意味的是,Pydantic V1 在其验证中并不严格,所以如果我们很“吹毛求疵”的话,在 V2 版本之前,“Pydantic”是一个用词不当的名称😉。

为什么使用 Pydantic?

  • 由类型提示驱动——借助 Pydantic,模式验证和序列化由类型注释控制;学习的更少,编写的代码更少,并且与您的 IDE 和静态分析工具集成

  • 速度——Pydantic 的核心验证逻辑是用 Rust 编写的。因此,Pydantic 是 Python 中最快的数据验证库之一。

  • JSON 模式——Pydantic 模型可以生成 JSON 模式,从而便于与其他工具进行集成。

  • 严格模式和宽松模式——Pydantic 可以在 strict=True 模式(数据不进行转换)或 strict=False 模式下运行(在适当的情况下,Pydantic 尝试将数据强制转换为正确类型)。

  • 数据类、类型字典等——Pydantic 支持对许多标准库类型的验证,包括 dataclass 和 TypedDict 。

  • 自定义——Pydantic 允许自定义验证器和序列化器以多种强大方式改变数据的处理方式。

  • 生态系统——PyPI 上约有 8000 个包使用 Pydantic,包括像 FastAPI、 huggingface、Django Ninja、SQLModel 和 LangChain 这样极受欢迎的库。

  • 经过实战检验——Pydantic 每月被下载超过 7000 万次,被所有 FAANG 公司以及纳斯达克 25 家最大公司中的 20 家所使用。如果你正试图用 Pydantic 做某事,那么可能其他人已经做过了。

安装 Pydantic

pip install pydantic

工作常用

  • BaseModel:用于定义数据模型,提供数据验证和序列化功能。
  • ConfigDict:用于配置模型的行为,控制额外字段的处理等。
  • model_validator:用于添加自定义验证逻辑,增强模型的验证能力。
    这三个组件结合使用,可以帮助开发者构建健壮且灵活的数据模型,确保数据的有效性和一致性。

BaseModel

BaseModel 是 Pydantic 的基础类,所有数据模型都应该继承自它。它提供了数据验证、序列化和反序列化等功能。

from pydantic import BaseModel  class User(BaseModel):  id: int  name: str  email: str  # 创建模型实例  
user = User(id=1, name="Alice", email="alice@example.com")  # 访问属性  
print(user.name)  # 输出: Alice  # 验证数据  
try:  user_invalid = User(id="not-an-int", name="Bob", email="bob@example.com")  
except ValueError as e:  print(e)  # 输出: 1 validation error for User  # id  #   value is not a valid integer (type=type_error.integer)

BaseModel 是 Pydantic 的基础类,所有数据模型都应该继承自它。它提供了数据验证、序列化和反序列化等功能。

  • 使用方法
    定义模型:通过继承 BaseModel,你可以定义自己的

  • 数据模型。
    属性定义:使用 Python 的类型提示来定义模型的属性及其类型。

  • 数据验证:在创建模型实例时,Pydantic 会自动验证传入的数据是否符合定义的类型。

ConfigDict

ConfigDict 是 Pydantic 2.x 中引入的配置类,用于定义模型的配置选项。它允许开发者控制模型的行为,例如是否允许额外的字段、是否允许使用字段名称填充模型等。

from pydantic import BaseModel, ConfigDict  class User(BaseModel):  id: int  name: str  model_config = ConfigDict(  extra="forbid"  # 禁止额外字段  )  # 创建模型实例  
try:  user = User(id=1, name="Alice", age=30)  # age 是额外字段  
except ValueError as e:  print(e)  # 输出: 1 validation error for User  # extra fields not permitted (type=value_error.extra)
  • 定义配置:在模型内部定义一个名为 model_config 的属性,并将其设置为 ConfigDict 的实例。
  • 配置选项:可以通过 ConfigDict 的参数来设置模型的行为。

model_validator

model_validator 是一个装饰器,用于在模型实例创建之前或之后执行自定义验证逻辑。它允许开发者在模型的生命周期中添加额外的验证规则。

定义验证方法:在模型类中定义一个方法,并使用 @model_validator 装饰器标记它。
指定验证模式:可以指定验证是在实例创建之前(mode="before")还是之后(mode="after")进行。

from pydantic import BaseModel, model_validator  class User(BaseModel):  id: int  name: str  email: str  @model_validator(mode="before")  @classmethod  def validate_email(cls, values):  email = values.get('email')  if email and "@" not in email:  raise ValueError("Invalid email address")  return values  # 创建模型实例  
try:  user = User(id=1, name="Alice", email="aliceexample.com")  # 邮箱格式不正确  
except ValueError as e:  print(e)  # 输出: 1 validation error for User  # Invalid email address

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498792.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源,TFTLCD彩屏显示及控制进行了整体介绍后,新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下,SWM221系列芯片以其卓越性能与创新设计,受…

2024165读书笔记|《飞花令·合》——人生飘忽百年内,且须酣畅万古情

2024165读书笔记|《飞花令合》—— 人生飘忽百年内,且须酣畅万古情 屈原班婕妤曹植刘绘卢思道卢照邻苏味道刘希夷李白高适杜甫司空曙白居易温庭筠韦庄窦叔向张泌林逋柳永晏殊欧阳修李觏舒亶秦观陈瓘李清照陆游辛弃疾姜夔蒋捷吴伟业纳兰性德张惠言邓廷桢 《飞花令合》…

露营小程序搭建有哪些步骤?小程序里面可以找个露营搭子

露营不仅仅是走进大自然的旅程,它也成为了一种社交和体验式的活动。随着小程序的普及,露营活动也越来越多地开始在线上开展。通过搭建一个露营小程序,商家不仅可以为用户提供更多的露营选择,还可以帮助他们找到合适的露营搭子。那…

Vue 针对浏览器参数过长实现浏览器参数加密解密

1、首先安装crypto-js npm install crypto-js 1、在router/index.js中添加如下代码 在utils工具类添加如下 encryption.js源码 import CryptoJS from crypto-js import CryptoJSCore from crypto-js/core import AES from crypto-js/aes import ZeroPadding from crypto-js/…

Unity-Mirror网络框架-从入门到精通之Basic示例

文章目录 前言Basic示例场景元素预制体元素代码逻辑BasicNetManagerPlayer逻辑SyncVars属性Server逻辑Client逻辑 PlayerUI逻辑 最后 前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人…

AIA - APLIC之二

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 对于APLIC实现的每一个中断域,都存在一个独享的内存映射的控制区域,用来处理该中断域的中断。 该控制区域大小是由4KB的倍数,并与4KB地址边界对齐,最小的有效控制区域是16KB。 接下来,本文将详细讲解,AP…

设计模式之访问者模式:一楼千面 各有玄机

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 一、访问者模式概述 \quad 江湖中有一个传说:在遥远的东方,有一座神秘的玉楼。每当武林中人来访,楼中的各个房…

SAP月结、年结前重点检查事项(后勤与财务模块)

文章目录 一、PP生产模块相关的事务检查二、SD销售模块相关的事务检查:三、MM物料管理模块相关的事务检查四、FICO财务模块相关的事务检查五、年结前若干注意事项【SAP系统PP模块研究】 #SAP #生产订单 #月结 #年结 一、PP生产模块相关的事务检查 1、月末盘点后,生产用料的…

JVM实战—6.频繁YGC和频繁FGC的后果

大纲 1.JVM GC导致系统突然卡死无法访问 2.什么是Young GC什么是Full GC 3.Young GC、Old GC和Full GC的发生情况 4.频繁YGC的案例(G1解决大内存YGC过慢) 5.频繁FGC的案例(YGC存活对象S区放不下) 6.问题汇总 1.JVM GC导致系统突然卡死无法访问 (1)基于JVM运行的系统最怕…

蓝牙|软件 Qualcomm S7 Sound Platform开发系列之初级入门指南

本文适用范围 ADK24.2~ 问题/功能描述 S7开发环境搭建与编译介绍 实现方案 本文介绍适用于windows平台Application部分,audio ss的说明会在下一篇文章在做说明,Linux平台如果不进行AI算法的开发,个人认知是没有必要配置,若是做服务器倒是不错的选择.因为编译完成后烧录调试还…

LabVIEW冷却风机性能测试系统

开发了基于LabVIEW软件及LabSQL工具包的冷却风机性能测试系统。系统通过高效的数据库访问技术,实现了对冷却风机测试过程中关键性能数据的采集、存储与管理,优化了测试流程并提升了数据处理的效率。 ​ 项目背景 在工业生产和科研测试中,准…

C 实现植物大战僵尸(四)

C 实现植物大战僵尸(四) C 实现植物大战僵尸,完结撒花(还有个音频稍卡顿的性能问题,待有空优化解决)。目前基本的功能模块已经搭建好了,感兴趣的友友可自行尝试编写后续游戏内容 因为 C 站不能…

车间管理:掌握方法,有效应对浪费

在制造企业中,车间的有效管理对于提高生产效率、降低成本以及提升产品质量至关重要,然而面对外部激烈的市场竞争,利润微薄,内部车间却充满了各种浪费,企业管理者头痛不已,如果能有效改进内部车间浪费&#…

Logo设计免费生成器工具:轻松创建独特标志

在当今的商业世界中,一个独特且引人注目的Logo是任何企业或品牌的身份象征。它不仅代表了公司的形象,还传达了公司的价值观和使命。然而,对于许多初创企业或小型企业来说,聘请专业设计师来设计一个Logo可能是一笔不小的开销。这时…

【智行安全】基于Synaptics SL1680的AI疲劳驾驶检测方案

随著车载技术的快速进步,驾驶安全越来越受到重视,而疲劳驾驶是造成交通事故的重要原因之一。传统的驾驶监控技术因精度不足或反应迟缓,无法满足实时监测需求。因此,结合人工智能技术的疲劳驾驶检测系统成为行业新方向,…

uni-ui样式修改

因为之前官网uni-ui有些组件的样式不好看,所以要做一些调整,做个记录。用分段器举例~ 官网原生样式 调整后的 首先找到我们的static文件夹,里面一般存着项目的全局样式文件,没有的话自己创一个 uniui.scss /deep/ .segmented-con…

大模型WebUI:Gradio全解系列9——Additional Features:补充特性(下)

大模型WebUI:Gradio全解系列9——Additional Features:补充特性(下) 前言本篇摘要8. Additional Features:补充特性8.5 分享demo8.5.1 嵌入托管 Spaces8.5.2 使用 Web Components 嵌入8.5.3 Embedding with IFrames 8.…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议,它替代了原来非标准的第二层协议(如SLIP)。在TCP/IP协议集中,PPP是一种用来同步调制连接的数据链路层协议(OSI模式中的第二层…

HTML5滑块(Slider)

HTML5 的滑块&#xff08;Slider&#xff09;控件允许用户通过拖动滑块来选择数值。以下是如何实现一个简单的滑块组件的详细说明。 HTML5 滑块组件 1. 基本结构 使用 <input type"range"> 元素可以创建一个滑块。下面是基本实现的代码示例&#xff1a; <…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…