pydantic的基础用法
Pydantic 基础教程
Pydantic 是一个 Python 库,用于数据解析和校验,它主要基于 Python 类型提示来进行。下面将详细介绍如何使用 Pydantic 来构建数据模型、校验数据以及处理数据。
安装 Pydantic
pip install pydantic
快速开始
创建一个基本模型
在 Pydantic 中,利用类定义数据模型并使用类型注解声明每个字段的数据类型:
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
age: int
signup_ts: datetime = None
实例化和验证模型
Pydantic 模型将会在创建实例时自动进行数据验证:
from datetime import datetime
user_data = {
'id': '123',
'name': 'John Doe',
'age': 30,
'signup_ts': '2023-01-01 12:34'
}
user = User(**user_data)
print(user)
#> id=123 name='John Doe' age=30 signup_ts=datetime.datetime(2023, 1, 1, 12, 34)
在上面的例子中,尽管 id
和 signup_ts
采用了字符串形式,Pydantic 仍然可以正确识别并将它们转换为适当的类型。这些很显然都是pedantic内部做了类型转换进行处理了。
数据校验
如果提供的数据类型不正确,Pydantic 会抛出异常:
try:
User(id=123, name='John Doe', age='thirty')
except ValidationError as e:
print(e.json())
这将会输出详细的错误信息,指示哪些字段不符合期望的类型。
模型的其他特性
Pydantic 还支持配置额外的模型设置、复杂的数据类型、嵌套模型等特性。
高级用法
以下是一些 Pydantic 的高级用法:
嵌套模型
你可以定义嵌套模型,以此表达更复杂的数据结构:
from typing import List
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
class Order(BaseModel):
id: int
items: List[Item]
字段校验
可以在模型字段上添加更多的校验逻辑:
from pydantic import Field
class Item(BaseModel):
name: str
description: str = None
price: float = Field(gt=0)
tax: float = None
在上述例子中,price
字段必须是大于0的浮点数。
自定义校验器
可以定义自定义的数据校验器:
from pydantic import validator
class Item(BaseModel):
name: str
price: float
@validator('name')
def name_must_be_capitalized(cls, v):
if not v[0].isupper():
raise ValueError('Name must start with a capital letter')
return v
自定义校验在我们今后的实际开发中非常有用,搭配上全局异常处理,才是我们实际工作中的用法。这个也会在后面的全局异常处理章节进行讲解。
带有复杂类型的模型
Pydantic 支持许多复杂的类型,如 Union
或 AnyHttpUrl
:
from typing import Union
from pydantic import BaseModel, HttpUrl
class MyModel(BaseModel):
url: Union[HttpUrl, None]
这允许 url
所接受的值是一个合法的 HTTP URL 或者是 None。
结论
以上便是一个 Pydantic 的基础教程,通过本教程,你可以了解到 Pydantic 的基本概念、如何定义数据模型、进行数据验证和校验等。Pydantic 提供了非常强大和便捷的机制来处理数据验证和类型转换问题,使得用 Python 处理数据变得简单且健壮。