python进阶(22)pydantic--数据类型校验
pydantic库的作用
pydantic
库是一种常用的用于数据接口schema
定义与检查的库。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 的类型是从其默认值推断来的,因此,类型注解不是必需的
- 有些字段没有指定类型,可能会引发字段顺序的警告
user = User(id="123")
print(type(user))#
print(user)# id=123 name='Silent丿丶黑羽'
这里的
user
是 User
的一个实例。对象的初始化会执行所有解析和验证,如果没有引发 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 模型的配置类(后续更新)
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)