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)

在上面的例子中,尽管 idsignup_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 支持许多复杂的类型,如 UnionAnyHttpUrl

from typing import Union
from pydantic import BaseModel, HttpUrl

class MyModel(BaseModel):
    url: Union[HttpUrl, None]

这允许 url 所接受的值是一个合法的 HTTP URL 或者是 None。

结论

以上便是一个 Pydantic 的基础教程,通过本教程,你可以了解到 Pydantic 的基本概念、如何定义数据模型、进行数据验证和校验等。Pydantic 提供了非常强大和便捷的机制来处理数据验证和类型转换问题,使得用 Python 处理数据变得简单且健壮。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值