pydantic模块之数据类型与数据结构

796 阅读2分钟

1.pydantic基本数据类型

pydantic常用的基本数据类型如下所示

from pydantic import BaseModel
from typing import Dict, List, Sequence, Set, Tuple
import decimal
​
​
class Demo(BaseModel):
    age: int
    high: float
    name: str
    is_active: bool
    score: Dict[str, float]
    foods: List[str]
    books: Set[str]
    property: Tuple[decimal]
    family:Sequence[dict]

2.高级数据结构

2.1 enum数据类型

from enum import Enum
​
​
class Gender(str, Enum):
    man = 'man'
    women = 'women'

2.2 可选数据类型

如果一个数据类型不是必须的,可以允许用户在使用中不进行传入,此时我们可以使用ytping库中的optional方法进行实现该功能,代码示例如下:

from pydantic import BaseModel
from typing import Optional
​
​
class Person(BaseModel):
    name: str
    age: Optional[int]

设置可选字段之后,数据中仍然会有age字段,但是其默认值意境被设置为None。意思如果Person实例对象不传入age字段的值,默认情形下获取到的age字段的值将为None

p1 = Person(name='小明')
print(p1.age)

3.数据默认值的设置

class Person(BaseModel):
    name: str
    gender: str = 'man'
​
​
p1 = Person(name='Tom')
print(p1.json())

result:

{"name": "Tom", "gender": "man"}

4.允许多种数据类型

如果一个数据允许多种数据类型,可以通过typing库的Union来进行实现,代码示例如下:

from pydantic import BaseModel
from typing import Union
​
​
class Time(BaseModel):
    time: Union[int, str]
​
​
t1 = Time(time=123)
print(t1.json())
t2 = Time(time='2021-11-28')
print(t2.json())

result:

{"time": 123}
{"time": "2021-11-28"}

5.异名数据传递方法

比如定义了一个schema,其中一个变量为name1, 现在需要将其重命名为name2,可以通过Field方法来实现这两个不同名称的变量传递,代码示例如下:

from pydantic import BaseModel,Field
​
class Password(BaseModel):
    password: str=Field(alias='pwd')

后续传入时我们需要使用pwd关键字来传入password变量即可

p = Password(pwd="123")
print(p.json())

result:

{"password": "123"}