pydantic学习与使用 ------ 基本模型(BaseModel)使用

2023-11-19

前言

在 pydantic 中定义对象的主要方法是通过模型(模型继承 BaseModel )。
pydantic主要是一个解析库,而不是验证库。验证是达到目的的一种手段:建立一个符合所提供的类型和约束的模型。
换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。
虽然验证不是pydantic的主要目的,但您可以使用此库进行自定义验证。

基本模型使用

User这是一个模型,它有两个字段id,一个是整数,是必需的,name一个是字符串,不是必需的(它有一个默认值)

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name = 'yo yo'

类型name是从默认值(字符串)推断出来的,因此不需要类型注释(但是请注意当某些字段没有类型注释时有关字段顺序的警告)

user = User(id='123')

user这是一个实例User。对象的初始化将执行所有解析和验证,如果没有ValidationError引发,说明生成的模型实例是有效的。
user实例有 id 和 name 2个属性

user = User(id='123')
print(user.id)   # 123
print(user.name)  # yo yo

模型的字段可以作为用户对象的普通属性访问。字符串 ‘123’ 已根据字段类型转换为 int.
name初始化用户时未设置,因此它具有默认值.

那么如何知道初始化的时候,需要哪些必填字段?可以通过 __fields_set__ 方法

print(user.__fields_set__)  # {'id'}

.dict() 可以将user对象的属性,转成字典格式输出,dict(user) 也是等价的

print(user.dict())  # {'id': 123, 'name': 'yo yo'}
print(dict(user))  # {'id': 123, 'name': 'yo yo'}

.json()可以将user对象的属性,转成json格式输出

print(user.json())  # {"id": 123, "name": "yo yo"}

BaseModel 模型属性

上面的例子只是展示了模型可以做什么的冰山一角。模型具有以下方法和属性:
dict()  返回模型字段和值的字典;参看。导出模型
json()  返回一个 JSON 字符串表示dict();参看。导出模型
copy() 返回模型的副本(默认为浅拷贝);参看。导出模型
parseobj() 如果对象不是字典,则用于将任何对象加载到具有错误处理的模型中的实用程序;参看。辅助函数
parseraw() 用于加载多种格式字符串的实用程序;参看。辅助函数
parsefile() 喜欢parseraw()但是对于文件路径;参看。辅助函数
fromorm() 将数据从任意类加载到模型中;参看。ORM模式
schema()  返回将模型表示为 JSON Schema 的字典;参看。图式
schemajson()  schema()返回;的 JSON 字符串表示形式 参看。图式
construct()  无需运行验证即可创建模型的类方法;参看。创建没有验证的模型
`__fields_set
初始化模型实例时设置的字段名称集__fields
模型字段的字典__config
`  模型的配置类,cf。模型配置

递归模型

可以使用模型本身作为注释中的类型来定义更复杂的分层数据结构。

from typing import List
from pydantic import BaseModel

class Foo(BaseModel):
    count: int
    size: float = None

class Bar(BaseModel):
    apple = 'x'
    banana = 'y'

class Spam(BaseModel):
    foo: Foo
    bars: List[Bar]

m = Spam(foo={'count': 4}, bars=[{'apple': 'x1'}, {'apple': 'x2'}])
print(m)
#> foo=Foo(count=4, size=None) bars=[Bar(apple='x1', banana='y'),
#> Bar(apple='x2', banana='y')]
print(m.dict())
"""
{
    'foo': {'count': 4, 'size': None},
    'bars': [
        {'apple': 'x1', 'banana': 'y'},
        {'apple': 'x2', 'banana': 'y'},
    ],
}
"""

辅助函数

Pydantic为解析数据的模型提供了三个classmethod辅助函数:

  • parseobj:这与模型的方法非常相似_init,除了它需要一个字典而不是关键字参数。

    如果传递的对象不是 dict,ValidationError则将引发。

  • parse_raw:

    这需要一个str或bytes并将其解析为json,然后将结果传递给parse_obj. 通过适当地设置参数也支持解析泡菜数据。

    content_type

  • parse_file: 这需要一个文件路径,读取文件并将内容传递给parse_raw. 如果content_type省略,则从文件的扩展名推断。

parse_obj 的使用

from datetime import datetime
from pydantic import BaseModel, ValidationError

class User(BaseModel):
    id: int
    name = 'John Doe'
    signup_ts: datetime = None

m = User.parse_obj({'id': 123, 'name': 'James'})
print(m)  # id=123 signup_ts=None name='James'

parse_raw 需要一个str或bytes并将其解析为json

m = User.parse_raw('{"id": 123, "name": "James"}')
print(m)  # > id=123 signup_ts=None name='James'

parse_file 可以读取一个文件的内容
data.json文件

from pathlib import Path

path = Path('data.json')  # 读取文件内容
m = User.parse_file(path)
print(m)  # > id=123 signup_ts=None name='James'

.write_text()可以自己写内容到文件

from pathlib import Path
path = Path('data1.json')
path.write_text('{"id": 345, "name": "James 11"}')
m = User.parse_file(path)
print(m)  # > id=345 name='James 11'

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:779450660里面有各种软件测试资源和技术讨论)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pydantic学习与使用 ------ 基本模型(BaseModel)使用 的相关文章

随机推荐

  • RequireJS 与 AngularJS 集成(完整版)

    JS结构 main js main js这个文件完成的事情简单来说就是 载入所有文件 然后在document上运行Angular并将ng app属性设置为 app 这些文件因为是由RequireJS异步载入 因此我们需要来 手动启动 Ang
  • 逻辑回归原理(python代码实现)

    原文 https blog csdn net csqazwsxedc article details 69690655 Logistic Regression Classifier逻辑回归主要思想就是用最大似然概率方法构建出方程 为最大化方
  • 架构学习笔记—优酷网

    互联网就是这么一个神奇的东西 今天我突然想到 优酷网在国内也算是视频网站的老大了 不知道他的架构相对于YouTube是怎么样的 于是带着这 个好奇心去网上找了优酷网架构的各方面资料 虽然谈的不是那么详细 但多少还是挖掘了一点 现在总结一下
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • c#与SQL server知识

    1 数据库建立 在C 中建立的数据库 想要在SQLserver中找到需要连接与c 相同的服务器才可以找到 2 在C 中建立数据库更新不成功 需要打开SQL server 连接与c 相同的服务器 随后在c 中更新 3 在c 界面中更新数据库成
  • maven安装及配置(详细版)

    1 下载 方式一可以从官方下载 下载页面 http maven apache org download cgi 方式二 或者题主提供的版本下载maven安装包 提取码 ysns 下载好后是一个压缩文件 2 安装 maven压缩包解压到一个没
  • 拓展知识 启望未来

    炎炎六月 迎来了备受期待的 亚信科技AntDB数据库初级认证培训 活动 通过培训 希望内蒙古移动及项目组的伙伴们能够系统学习到国产数据库的核心知识 提升专业技能 为服务感知提升 运维团队培育注入新的活力 26号上午 首先由内蒙古移动智慧运维
  • 【10】Docker私有仓库

    一 私有仓库搭建与配置 1 拉取 私有仓库 镜像 docker pull registry 2 创建并启动 私有仓库 容器 docker run di name registry p 5000 5000 registry 打开浏览器输入地址
  • JavaScript Boolean 对象

    解释 Boolean 对象用于转换一个不是 Boolean 类型的值转换为 Boolean 类型值 true 或者false 语法 var a true var b false Boolean 对象属性 属性 描述 constructor
  • 数据结构学习系列之顺序表的两种创建方式

    方式1 通过返回值返回所申请的内存空间的首地址 示例代码 list t create seq list 1 list t p list t malloc sizeof list t if NULL p printf 内存分配失败 n exi
  • linux内核、驱动和硬件之间的关系和通信

    linux驱动是直接和硬件打交道的软件程序 层次结构上 它处于操作系统和硬件之间 驱动与linux内核的关系 驱动程序提供的一组设备驱动接口函数Device Driver Interface给操作系统在linux中 这一组设备驱动接口函数一
  • 前端axios下载excel文件(二进制)的处理方法

    前端axios下载excel文件 二进制 的处理方法 后端生成excel后 前端 click 事件进行下载 脱坑记录 亲测有效 lz 使用的是 axios 发起请求 首先 介绍一下思路 准备通过动态创建 a 标签 通过 blob 对象进行接
  • java调优总结

    JVM调优总结 序 几年前写过一篇关于JVM调优的文章 前段时间拿出来看了看 又添加了一些东西 突然发现 基础真的很重要 学习的过程是一个由表及里 再由里及表的过程 呵呵 所谓的 温故而知新 而真正能走完这个轮回的人 也就能称为大牛或专家了
  • 补充:YOLO模型训练时loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡)

    补充 1 参考1 2 补充 3 小结 1 参考1 在参考有头发的垃圾猿的 YOLO系列训练时出现loss出现nan值或者测试时P R map全部为0值的解决办法 GTX16xx系列显卡大坑 后 发现问题不能得到实际的解决 可能是版本不一样导
  • vs调试正确显示utf8格式字符串

    vs调试正确显示utf8格式字符串 自从将visual studio从2010升级到2015后 发现调用接口的utf8格式字符串不能正常显示了 常常被莫名其妙截断 查了下 原来可以直接将变量拖到watch窗口中 在变量名后面手动添加 s8予
  • 计算机网络的两级子网指,计算机三级网络技术分类练习题_网络基本概念(一).doc...

    您所在位置 网站首页 gt 海量文档 nbsp gt nbsp资格 认证考试 nbsp gt nbsp计算机等级考试 计算机三级网络技术分类练习题 网络基本概念 一 doc6页 本文档一共被下载 次 您可全文免费在线阅读后下载本文档 下载提
  • 高可用集群(1)- Pacemaker+Corosync实现负载均衡和高可用

    1 问题引入 计算机集群可用于提供高可用性服务或资源 多台机器的冗余是用来防止多种类型的故障 集群将使用Pacemaker和Corosync提供资源管理和消息传递 下面将介绍所需的包和对其配置文件的修改 以及使用Pacemaker命令行工具
  • 循环的断点调试,指定第几次循环

    循环的断点调试 指定第几次循环 右击断点添加条件 断点要设置在条件之后 例如本次 想要i 3的时候的循环 条件要设到i后边 令i 3 回车 再按F5即可
  • CSS 学习笔记(基础)

    用来控制网页表现的语言 CSS Cascading Style Sheet 层叠样式表 然后我们继续看看 W3C 标准 结构 HTML 表现 CSS 行为 JavaScript CSS导入方式 选择器 属性 由于网页的框架结构是由HTML实
  • pydantic学习与使用 ------ 基本模型(BaseModel)使用

    前言 在 pydantic 中定义对象的主要方法是通过模型 模型继承 BaseModel pydantic主要是一个解析库 而不是验证库 验证是达到目的的一种手段 建立一个符合所提供的类型和约束的模型 换句话说 pydantic保证输出模型