标题:Python库Pydantic的简易入门教程
什么是Pydantic?
Pydantic是一个用于数据验证和序列化的Python库,它使用Python的类型注解进行数据验证,同时能够自动的序列化和反序列化Json,YAML和其他数据格式。Pydantic具有以下特点:
- 确保输入数据类型正确并自动完成类型转换
- 自动验证输入数据的规范性,并提供详细的错误提示
- 通过编程方式来明确和描述数据结构,提高代码可读性
- 支持使用ORM来进行数据模型定义,数据库操作
安装Pydantic
使用pip可以很方便地安装Pydantic,可以在Python环境中运行以下命令:
pip install pydantic
第一个示例
首先,我们需要引入Pydantic的BaseModel类:
from pydantic import BaseModel
定义一个简单的模型来验证输入数据:
class User(BaseModel):
id: int
name: str
email: str
age: Optional[int] = None
这里我们定义了一个User模型,它包含id,name,email和age字段。其中,id、name和email是必需的字段,而age是可选的字段,如果不提供它将被设置为None。我们可以使用User的实例来验证输入数据是否符合模型定义:
user = User(id=123, name='John', email='john@example.com')
print(user)
以上代码输出:
id=123 name='John' email='john@example.com' age=None
如果我们提供的数据不符合模型定义,将会引发一个异常。
user = User(id='abc', email='john@example.com')
以上代码将引发以下异常:
pydantic.error_wrappers.ValidationError: 2 validation errors for User
id
value is not a valid integer (type=type_error.integer)
name
field required (type=value_error.missing)
序列化和反序列化
Pydantic使得我们将模型转换为JSON格式变得非常简单。我们可以使用
以下代码将User模型的实例转换为JSON格式的字符串:
user = User(id=123, name='John', email='john@example.com')
user_json = user.json()
print(user_json)
输出:
{"id": 123, "name": "John", "email": "john@example.com", "age": null}
类似地,我们还可以将JSON字符串反序列化为User模型的实例。
user_dict = {'id': 123, 'name': 'John', 'email': 'john@example.com'}
user = User.parse_raw(user_dict)
print(user)
输出:
id=123 name='John' email='john@example.com' age=None
第二个示例
除了以上基本用法,我们还可以使用Pydantic定义复杂的数据模型。
下面我们来举一个根据输入数据自动计算结果的示例,可以根据输入的价格和数量计算订单的总金额。
定义一个Order模型,我们需要输入订单的价格price和数量quantity,模型会自动计算订单的总金额amount。
class Order(BaseModel):
price: float
quantity: int
amount: Optional[float] = None
class Config:
orm_mode = True
@validator('amount', pre=True, always=True)
def cal_amount(cls, v, values):
if 'price' in values and 'quantity' in values:
return values['price'] * values['quantity']
return v
以上代码中,我们在模型中定义了一个values方法,它将在创建模型实例时自动调用。这个方法根据订单的价格和数量计算订单总金额amount。我们还添加了模型验证器,它确保价格和数量都大于零,它会检查amount值并在必要时自动计算。
我们可以使用以下代码来创建一个Order模型的实例:
order = Order(price=20.5, quantity=3)
print(order)
输出:
price=20.5 quantity=3 amount=61.5
我们还可以使用JSON格式的数据来创建Order模型的实例。
order_dict = {'price': 33.5, 'quantity': 2}
order = Order.parse_obj(order_dict)
print(order)
输出:
price=33.5 quantity=2 amount=67.0
以上就是Pydantic库的简易入门教程,在实际的应用中,Pydantic可以帮助我们更加便捷地进行数据验证和序列化,提高我们的开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python库pydantic的简易入门教程 - Python技术站