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

pydantic库的作用

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


用法详解
模型
  • pydantic中定义对象的主要方法是通过模型(模型是继承自 BaseModel 的类)。
  • 将模型看作严格类型语言中的类型(例如Java),或者看作API中单个端点的需求。
  • 不受信任的数据可以传递给模型,在解析和验证之后,pydantic保证结果模型实例的字段将符合模型上定义的字段类型。
注意事项
  • pydantic是一个解析库,而不是一个验证库。
  • 验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。
  • 换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。
基础模型使用
from pydantic import BaseModelclass User(BaseModel): id: int name = "Silent丿丶黑羽"

  • User这是一个有两个字段的模型
  • id是一个整型,必填项
  • name是一个有默认值的字符串,不是必填项
为什么name字段不需要声明类型
  • name 的类型是从其默认值推断来的,因此,类型注解不是必需的
  • 有些字段没有指定类型,可能会引发字段顺序的警告
user = User(id="123") print(type(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()))#


json() 返回表示 dict()JSON 字符串
user = User(id=123) print(user.json())# {"id": 123, "name": "jkc"} print(type(user.json()))#


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" ] }


schema_json() 【python进阶(22)pydantic--数据类型校验】返回以 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" ] }


fields_set 返回用户初始化对象时提供了什么字段
user = User(id=123) print(user.__fields_set__)# {'id'}user = User(id=123, name="jkc") print(user.__fields_set__)# {'name', 'id'}


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

    推荐阅读