Pydantic 是一个用于数据验证和设置的 Python 库,它利用 Python 的类型提示来实现数据模型的定义和验证。Pydantic 能够根据数据模型自动进行数据解析、验证和转换,使得数据处理更加简单和可靠。本文将介绍 Pydantic 的基本操作,帮助你快速上手并利用其强大的功能。
安装 Pydantic
在开始之前,首先需要安装 Pydantic。可以通过 pip 进行安装:
定义 Pydantic 模型
使用 Pydantic 定义数据模型非常简单,只需创建一个继承自 pydantic.BaseModel
的类,并定义其属性即可。
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
age: int
# 创建一个 User 对象
user = User(id=1, name='Alice', email='alice@example.com', age=30)
print(user)
复制代码
在这个例子中,我们定义了一个 User
类,并指定了每个属性的类型注解(如 int
、str
、float
等)。Pydantic 使用类型提示来推断和验证数据的类型。
数据验证与自动转换
Pydantic 可以自动验证输入数据并进行类型转换。如果传入的数据类型与模型定义不匹配,Pydantic 将抛出 ValidationError
异常。
# 尝试传入错误类型的数据
try:
invalid_user = User(id='1', name='Bob', email='bob@example.com', age='thirty')
except ValidationError as e:
print(e)
复制代码
默认值和可选属性
可以为 Pydantic 模型的属性指定默认值或者设置属性为可选的。
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float = 0.0
quantity: int = 1
description: str = None # 可选属性
# 创建一个 Item 对象
item = Item(name='Keyboard', price=99.99)
print(item)
复制代码
在这个例子中,price
和 quantity
属性有默认值,description
是一个可选属性,可以不传入。
数据解析
Pydantic 支持从字典、JSON 字符串等格式的数据进行解析创建对象。
data_dict = {'name': 'Mouse', 'price': 49.99}
item = Item(**data_dict)
print(item)
json_data = '{"name": "Monitor", "price": 199.99}'
item_from_json = Item.parse_raw(json_data)
print(item_from_json)
复制代码
嵌套模型
Pydantic 支持嵌套模型,可以在模型中嵌套其他 Pydantic 模型。
class Address(BaseModel):
street: str
city: str
zip_code: str
class Person(BaseModel):
id: int
name: str
address: Address
person_data = {
'id': 1,
'name': 'Alice',
'address': {'street': '123 Main St', 'city': 'Anytown', 'zip_code': '12345'}
}
person = Person(**person_data)
print(person)
复制代码
数据类的序列化与反序列化
Pydantic 可以将对象转换为字典或 JSON 字符串,也可以从字典或 JSON 字符串反序列化为对象。
# 将对象转换为字典
print(user.dict())
# 将对象转换为 JSON 字符串
print(user.json())
# 从 JSON 字符串反序列化为对象
json_data = '{"id": 2, "name": "Eve", "email": "eve@example.com", "age": 25}'
user_from_json = User.parse_raw(json_data)
print(user_from_json)
复制代码
使用配置
可以通过配置来自定义 Pydantic 模型的行为,例如自定义错误消息、字段别名等。
from pydantic import BaseModel, ValidationError, Field
class Item(BaseModel):
name: str
price: float = Field(..., gt=0, description="Price must be greater than zero")
quantity: int = Field(1, description="Default quantity is 1")
class Config:
anystr_strip_whitespace = True # 自动移除字符串属性的前后空格
# 创建一个 Item 对象
try:
invalid_item = Item(name='Laptop', price=-999.99)
except ValidationError as e:
print(e)
复制代码
通过本文的介绍,你应该已经掌握了 Pydantic 的基本操作方法和一些高级特性。Pydantic 提供了强大且易于使用的工具来定义和验证数据模型,使得数据处理更加简单和可靠。在实际应用中,合理利用 Pydantic 可以提高代码的可读性和健壮性,特别是在处理复杂的数据结构和外部数据源时更为有效。
评论