python进阶(22)pydantic–数据类型校验

python进阶(22)pydantic–数据类型校验pydantic库的作用pydantic库是一种常用的用于数据接口schema定义与检查的库。Pydantic在运行时强制执行类型提示,并在数据无效时提供用户友好的错误信息。pydantic安

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

pydantic库的作用

  • pydantic库是一种常用的用于数据接口schema定义与检查的库。
  • Pydantic 在运行时强制执行类型提示,并在数据无效时提供用户友好的错误信息。
     

pydantic安装

pip install pydantic

 

用法详解

 

模型

  • pydantic中定义对象的主要方法是通过模型(模型是继承自 BaseModel 的类)。
  • 将模型看作严格类型语言中的类型(例如Java),或者看作API中单个端点的需求。
  • 不受信任的数据可以传递给模型,在解析和验证之后,pydantic保证结果模型实例的字段将符合模型上定义的字段类型。

注意事项

  • pydantic是一个解析库,而不是一个验证库。
  • 验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。
  • 换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。
     

基础模型使用

from pydantic import BaseModel


class User(BaseModel):
    id: int
    name = "Silent丿丶黑羽"
  • User这是一个有两个字段的模型
  • id是一个整型,必填项
  • name是一个有默认值的字符串,不是必填项

为什么name字段不需要声明类型

  • name 的类型是从其默认值推断来的,因此,类型注解不是必需的
  • 有些字段没有指定类型,可能会引发字段顺序的警告
user = User(id="123")
print(type(user))  # <class '__main__.User'>
print(user)  # id=123 name='Silent丿丶黑羽'

这里的 userUser 的一个实例。对象的初始化会执行所有解析和验证,如果没有引发 ValidationError 异常,则表明结果模型实例是有效的。

这里我们传入了的id是一个字符串,但实际打印出来却是整型,是因为pydantic在数据传输时会直接进行数据转换
 

模型属性

模型有多个属性和方法,我们依次介绍
 

dict()

返回模型的字段和值的字典

user = User(id=123)
print(user.dict())  # {'id': 123, 'name': 'jkc'}
print(type(user.dict()))  # <class 'dict'>

 

json()

返回表示 dict()JSON 字符串

user = User(id=123)
print(user.json())  # {"id": 123, "name": "jkc"}
print(type(user.json()))  # <class 'str'>

 

copy()

返回模型的拷贝,默认是浅拷贝

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

 

parse_obj()

这与模型的_init__方法非常相似,只是它采用dict而不是关键字参数。如果传递的对象不是dict,将引发ValidationError

user = User(id=123)
print(user.parse_obj({"id": 3, "name": "jkc"}))  # id=3 name='jkc'
print(user.parse_obj(['a']))  # 引发ValidationError错误

parse_raw()

用于加载多种格式字符串的实用程序

user = User(id=123)
print(user.parse_raw('{"id": 3, "name": "jkc"}'))  # id=3 name='jkc'

 

parse_file()

parse_raw() 类似,但是是接收文件路径,读取文件并将内容传递给parse_raw

path = Path('data.json')
path.write_text('{"id": 123, "name": "James"}')
m = User.parse_file(path)
print(m)  # id=123 signup_ts=None name='James'

 

schema()

返回以 JSON Schema 形式返回模型,以字典格式

user = User(id=123, name="jkc")
print(user.schema())
print(type(user.schema()))

# 输出结果
{
    "title":"User",
    "type":"object",
    "properties":{
        "id":{
            "title":"Id",
            "type":"integer"
        },
        "name":{
            "title":"Name",
            "default":"jkc",
            "type":"string"
        }
    },
    "required":[
        "id"
    ]
}

<class 'dict'>

 

schema_json()

返回以 JSON Schema 形式返回模型,以JSON字符串形式

user = User(id=123, name="jkc")
print(user.schema_json())
print(type(user.schema_json()))

# 输出结果
{
    "title":"User",
    "type":"object",
    "properties":{
        "id":{
            "title":"Id",
            "type":"integer"
        },
        "name":{
            "title":"Name",
            "default":"jkc",
            "type":"string"
        }
    },
    "required":[
        "id"
    ]
}

<class 'str'>

 

fields_set

返回用户初始化对象时提供了什么字段

user = User(id=123)
print(user.__fields_set__)  # {'id'}

user = User(id=123, name="jkc")
print(user.__fields_set__)  # {'name', 'id'}

 

config

模型的配置类(后续更新)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164821.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【系统架构设计师】第一章:操作系统(1.2.3)续:管程

    【系统架构设计师】第一章:操作系统(1.2.3)续:管程上节链接【系统架构设计师】第一章:操作系统(1.2.3)死锁问题这一节其实想水一章来着。。。因为书上的东西实在是太少,管程就提到了一点,我也不好写太多。不过细想一下,还是决定写点吧。1.2.3管程书上给的东西太少,而且写的很难懂,所以这里我就先不引用书上的东西了,直接写一些自己的理解了。本文参考链接:https://blog.csdn.net/zy702432103/article/details/84259683https://blog.csdn.net/qq_32534441/a.

    2025年8月4日
    2
  • python做微信回复机器人_Python自动化脚本

    python做微信回复机器人_Python自动化脚本Python几十行代码轻松实现微信自动回复机器人最近因为太无聊了就考虑能不能做一些好玩的东西出来,正好在CSDN的推荐上看到大佬做的微信自动回复机器人,觉得很有趣,因此想着自己也能动手做一个。在此就写下我的具体思路和实现过程吧。首先,我是选择先找一个具有自动回复功能的机器,调用其API,上网搜索了一下,发现大家伙都推荐图灵机器人,然后我就溜过去找了一下图灵机器人,最后发现:它收费!!!可恶啊,难道刚开始就要结束了吗?后来我又开始了百度大法,最后发现了一个免费的机器人API:青云客。测试了一手

    2022年10月1日
    4
  • 从几何角度理解反函数的导数[通俗易懂]

    从几何角度理解反函数的导数[通俗易懂]从几何角度理解反函数的导数在同一个函数图像中,反函数和函数表达式是对同一个函数的不同表示tan⁡(π2−α)=tan⁡β cot⁡α=tan⁡β 1tan⁡α=tan⁡β 1f′(x)=φ′(y)\tan(\frac{\pi}{2}-\alpha)=\tan\beta\\~\\\cot\alpha=\tan\beta\\~\\\frac{1}{\tan\alpha}=\tan\beta\\~\\\frac{1}{f'(x)}=\varphi'(y)tan

    2025年6月28日
    3
  • 程序员真是太太太太太有趣了

    程序员真是太太太太太有趣了点击上方“程序员小明”,选择“星标”今晚可以不加班!网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位…

    2022年6月14日
    46
  • JavaScript给元素添加class属性

    JavaScript给元素添加class属性注意:element.classList.remove()、element.classList.add()—ie9及以下不兼容//移除div的class属性obj.classList.remove(‘active’);//添加class属性值//方式一obj.className+=’newactive’;//方式二//obj.className=…

    2022年6月22日
    276
  • Matlab保存图像的5种方法「建议收藏」

    Matlab保存图像的5种方法「建议收藏」此博客转自:https://blog.csdn.net/holybin/article/details/39502077,另外我补充了一些实验结果。1、使用imwrite函数如图像是img,则可以使用imwrite(img,’result.jpg’);这种方法保存图像大小和显示的大小是一样的。下面的方法得到的图像和原图像的大小不一样;下面是用该方法保存的图片我们注意到,用imwrite保存的图…

    2022年9月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号