整体说明
- Pydantic 库可利用 Python 类型提示对数据进行验证、解析、转换以及管理,确保数据的完整性、规范性和一致性
- Pydantic 库还方便数据在不同格式间的序列化与反序列化
安装
- 使用以下命令安装 Pydantic:
1
pip install pydantic
基本使用
定义数据模型
- 通过继承
BaseModel来定义数据模型类,类中的字段使用类型注解来指定数据类型1
2
3
4
5
6
7from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
age: int
is_active: bool = True
数据验证和解析
- 创建数据模型的实例时,Pydantic 会自动进行数据验证和解析
- 如果数据符合模型定义,就可以正常创建实例;
- 如果数据无效,会抛出
ValidationError异常
- 示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16data = {
"id": 1,
"name": "Alice",
"age": 30
}
user = User(**data)
print(user)
invalid_data = {
"id": "invalid", # id应该是int类型
"age": "thirty" # age应该是int类型
}
try:
user = User(**invalid_data)
except ValidationError as e:
print(e)
高级特性
可选字段 :使用
Optional类型来定义可选字段。例如:1
2
3
4
5
6
7from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
age: Optional[int]默认值 :可以在定义字段时直接设置默认值。例如:
1
2
3
4
5
6from pydantic import BaseModel
class User(BaseModel):
id: int
name: str = "Jane Doe"
age: int = 18允许多种数据类型 :通过类型提示允许字段接受多种数据类型。例如:
1
2
3
4
5
6from typing import Union
from pydantic import BaseModel
class User(BaseModel):
id: Union[int, str]
name: str枚举类型 :Pydantic支持枚举类型,用于限制字段的值只能是预定义的一组值之一。例如:
1
2
3
4
5
6
7
8
9
10
11from enum import Enum
from pydantic import BaseModel
class Gender(str, Enum):
MALE = "male"
FEMALE = "female"
class User(BaseModel):
id: int
name: str
gender: Gender嵌套模型 :可以定义嵌套的模型来表示复杂的数据结构。例如:
1
2
3
4
5
6
7
8
9
10
11from pydantic import BaseModel
class Address(BaseModel):
street: str
city: str
zip_code: str
class User(BaseModel):
id: int
name: str
address: Address自定义验证器 :使用
validator装饰器可以在数据被解析后进行额外的验证。例如:1
2
3
4
5
6
7
8
9
10from pydantic import BaseModel, validator
class User(BaseModel):
age: int
def check_age(cls, value):
if value < 0:
raise ValueError('Age must be a non - negative integer')
return value
其他功能
- 数据模型实例具有一些属性和方法,如
dict()返回模型字段和值的字典,json()返回JSON字符串表示,copy()创建模型的副本等 - 使用
create_model方法可以动态创建模型(不常用):1
2
3from pydantic import create_model
DynamicModel = create_model('DynamicModel', foo=(str, ...), bar=123)