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