PyDantic 简易教程

部署运行你感兴趣的模型镜像

PyDantic 是一个用于数据验证和设置管理的 Python 库。它通过定义数据模型来验证数据,并提供类型提示和自动生成的文档。本教程将带你从基础到高级,逐步掌握 PyDantic 的使用。

目录

  1. 安装 PyDantic
  2. 基本数据模型
  3. 字段验证
  4. 嵌套模型
  5. 配置选项
  6. 自定义验证器
  7. 错误处理

1. 安装 PyDantic

首先,你需要安装 PyDantic。你可以使用 pip 来安装:

pip install pydantic

2. 基本数据模型

PyDantic 的核心是定义数据模型。你可以使用 BaseModel 类来定义一个模型。

from pydantic import BaseModel

class User(BaseModel):
    id: int
    name: str
    email: str

在这个例子中,我们定义了一个 User 模型,包含 idnameemail 三个字段。每个字段都有类型注解。

创建模型实例

你可以像创建普通类实例一样创建模型实例:

user = User(id=1, name="John Doe", email="john.doe@example.com")
print(user)

输出:

id=1 name='John Doe' email='john.doe@example.com'

访问字段

你可以通过属性访问字段:

print(user.name)  # 输出: John Doe

3. 字段验证

PyDantic 会自动验证传入的数据。如果数据不符合模型的定义,PyDantic 会抛出 ValidationError 异常。

try:
    user = User(id="invalid", name="John Doe", email="john.doe@example.com")
except Exception as e:
    print(e)

输出:

1 validation error for User
id
  Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='invalid', input_type=str]
    For further information visit https://errors.pydantic.dev/2.9/v/int_parsing

默认值

你可以为字段设置默认值:

class User(BaseModel):
    id: int
    name: str
    email: str
    is_active: bool = True

可选字段

你可以使用 Optional 来定义可选字段:

from typing import Optional

class User(BaseModel):
    id: int
    name: str
    email: str
    age: Optional[int] = None

4. 嵌套模型

PyDantic 支持嵌套模型。你可以将一个模型作为另一个模型的字段。

class Address(BaseModel):
    street: str
    city: str
    zip_code: str

class User(BaseModel):
    id: int
    name: str
    email: str
    address: Address

创建嵌套模型实例:

address = Address(street="123 Main St", city="New York", zip_code="10001")
user = User(id=1, name="John Doe", email="john.doe@example.com", address=address)
print(user)

输出:

id=1 name='John Doe' email='john.doe@example.com' address=Address(street='123 Main St', city='New York', zip_code='10001')

5. 配置选项

你可以通过 Config 类来配置模型的行为。

from pydantic import BaseModel, ConfigDict, ValidationError

class Model(BaseModel):
    model_config = ConfigDict(str_max_length=10)
    v: str

try:
    m = Model(v='x' * 20)
except ValidationError as e:
    print(e)
    """
    1 validation error for Model
    v
      String should have at most 10 characters [type=string_too_long, input_value='xxxxxxxxxxxxxxxxxxxx', input_type=str]
    """

另一种方式:

from pydantic import BaseModel, ValidationError

class Model(BaseModel, extra='forbid'):  
    a: str

try:
    Model(a='spam', b='oh no')
except ValidationError as e:
    print(e)
    """
    1 validation error for Model
    b
      Extra inputs are not permitted [type=extra_forbidden, input_value='oh no', input_type=str]
    """

可以参考链接:https://docs.pydantic.dev/dev/concepts/config/

6. 自定义验证器

你可以使用 validator 装饰器来定义自定义验证器。

from pydantic import BaseModel, field_validator

class User(BaseModel):
    id: int
    name: str
    email: str

    @field_validator('email', mode='before')
    @classmethod
    def validate_email(cls, value):
        if "@" not in value:
            raise ValueError("Invalid email address")
        return value

在这个例子中,我们定义了一个验证器来检查电子邮件地址是否包含 @ 符号。

7. 错误处理

当验证失败时,PyDantic 会抛出 ValidationError 异常。你可以捕获这个异常并处理错误。

from pydantic import ValidationError

try:
    user = User(id=1, name="John Doe", email="invalid-email")
except ValidationError as e:
    print(e.errors())

输出:

[{'type': 'value_error', 'loc': ('email',), 'msg': 'Value error, Invalid email address', 'input': 'invalid-email', 'ctx': {'error': ValueError('Invalid email address')}, 'url': 'https://errors.pydantic.dev/2.9/v/value_error'}]

参考链接:https://docs.pydantic.dev/dev/

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何在LangChain中使用Pydantic v2 #### 版本变更概述 Pydantic v2引入了许多重要的更改,这些更改可能会影响现有代码的兼容性。主要变化包括API调整、性能优化以及一些功能增强[^1]。 #### 推荐实践方法 为了更好地管理不同版本间的差异并顺利迁移到Pydantic v2,在实际开发中有如下几种推荐做法: - **模块化设计** 将涉及Pydantic v1和v2的部分分别隔离到不同的模块中,从而避免两者之间的冲突。例如,创建单独的文件夹用于存储基于旧版的功能逻辑,并通过适配器模式将其集成至新版框架下运行环境之中[^4]。 - **逐步迁移策略** 不应尝试一次性完成整个项目的升级工作;而是先选取一小部分作为试点对象实施转换操作后再推广开来。这种方法不仅能够有效降低风险还方便及时发现潜在问题加以修正。 - **利用命名空间区分版本依赖关系** 当某些特定场景仍需保留对早期版本的支持时,则可通过显式指定`pydantic.v1`这样的路径形式来访问相应资源而不至于引起混淆或者覆盖现象发生。 #### 示例代码展示 下面给出一段简单的Python脚本来演示如何正确加载两个不同版本下的模型定义方式: ```python from pydantic import BaseModel, ConfigDict try: from pydantic.v1 import BaseModel as V1BaseModel except ImportError: class V1BaseModel(BaseModel): pass class UserV1(V1BaseModel): id: int name: str model_config = {'validate_assignment': True} # For Pydantic v1 compatibility class UserV2(BaseModel): id: int name: str model_config = ConfigDict(validate_assignment=True) # Updated syntax for Pydantic v2 ``` 此段程序展示了针对每种情况所采用的具体实现细节区别之处。 #### 官方文档链接指引 对于更深入的学习需求,可以查阅以下权威来源获取更多指导信息: - [Pydantic v2 Migration Guide](https://docs.pydantic.dev/usage/migration/) - [LangChain Official Documentation](https://langchain.readthedocs.io/en/latest/) 以上资料均提供了详尽的操作步骤说明及相关案例分析帮助理解掌握相关内容要点][^[^23]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值