基本使用
安装
pip install pydantic
定义
pydantic 库的数据定义方式是通过 BaseModel 类来进行定义的,所有基于 pydantic 的数据类型本质上都是一个 BaseModel 类
# coding=utf-8from pydantic import BaseModelclass Person(BaseModel):name: strage: int
调用
调用时,只需对其进行实例化即可,实例化方法有以下几种:
直接传值
p = Person(name='kuma', age=24)print(p.name)
字典传入
person = {'name': 'kuma', 'age': 24}p = Person(**person) # 解包方式传给类print(p.name)
补充
- 过滤
person = {'name': 'kuma', 'age': 24, 'gender': 'girl'}p = Person(**person)print(p.json()) # 结果显示额外的 gender 被自动过滤了
传入值多于定义值时,BaseModel 会自动过滤,这样传递数据更安全,同时也意味着在前期的定义中必须尽可能定义完全
- 转换 ```python p = Person(name=123, age=’12’) print(p.json())
{‘name’:’123’, ‘age’:12} ``` pydantic 在传输数据时会直接对数据类型转换,如果数据传输格式错误,可以通过转换变为正确的数据类型,如果不能转换则报错
模型属性
可选数据类型
如果有一个数据类型不是必须的,可以允许用户在使用中不进行传入,则可以使用 typing 库中的 Optional 方法实现
# coding=utf-8from pydantic import BaseModelfrom typing import Optionalclass Person(BaseModel):id: Optional[int] # 使用 Optional[] 设定可选数据name: strp = Person(name='kuma')print(p.json())
设置为可选数据类型时,该数据仍然会有该字段,但是其默认值为 None。即当不传入 id 字段是,Person 仍然可以取到 age,只是值为 None
数据默认值
# coding=utf-8from pydantic import BaseModelfrom typing import Optionalclass Person(BaseModel):name: strage: int = 24p = Person(name='kuma')print(p.json())
多种数据类型
# coding=utf-8from typing import Unionfrom pydantic import BaseModelclass Person(BaseModel):time: Union[int, str] # 或者用 List[int or str],即前面 typing 要导入 Listp = Person(time=1234)print(p.json)p1 = Person(time='2021-08-17')print(p1.json)
异名数据传递
一个模型中的一个变量名为 A,在后续的定义中,将这个变量命名为 B,同时能进行两个不同名称参量的相互传递,可以用 Filed 方法解决
# coding=utf-8from pydantic import BaseModel, Fieldclass Test(BaseModel):pwd: str = Field(alias='key')t = Test(key='12345') # 需用 key 关键词来传入 pwd 变量print(t.json())
