AI智能
改变未来

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: intname = "Silent丿丶黑羽"
  • User这是一个有两个字段的模型
  • id是一个整型,必填项
  • name是一个有默认值的字符串,不是必填项

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

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

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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » python进阶(22)pydantic–数据类型校验