大数跨境
0
0

一个神奇的Python库 -- 利用Pydantic高效数据验证

一个神奇的Python库 -- 利用Pydantic高效数据验证 AI算法之道
2025-03-24
1
导读:Pydantic高效数据验证讲解
点击蓝字
关注我们










01


引言



Pydantic 是一个功能强大的 Python 库,用于通过类型提示实现数据验证和设置管理。本文将逐步介绍 Pydantic 的基础知识,包括安装步骤、创建示例、数据验证,以及自定义验证器等高级功能。

闲话少说,我们直接开始吧!





02


安装Pydantic

首先,我们需要安装 Pydantic。大家可以使用 pip 进行安装 , 安装命令如下所示:

pip install pydantic





03


简单示例

我们通过一个简单的示例,来讲解该库如何使用。Pydantic Model是一个继承自 BaseModel 的类。通过类型注解定义模型的字段后,Pydantic 会自动完成数据验证。
from pydantic import BaseModel
class User(BaseModel):    idint    name: str    email: str
# Example usageuser = User(id=1, name="John Doe", email="john.doe@example.com")print(user)
在本例中,User 是一个 Pydantic Model,包含三个字段:id、name 和 email。Pydantic 会在创建实例时验证这些字段的类型。
上述代码输出如下:
image.png

如果输入数据不符合预期类型,Pydantic 会引发 ValidationError:

from pydantic import ValidationError
try:    user = User(id="one", name="John Doe", email="john.doe@example.com")except ValidationError as e:    print(e)

上述代码输出如下:

image.png

可以看到,上述代码将打印错误信息,因为 id 应为整数,但提供输入却是字符串。






04


使用默认值

此外,大家还可以使用 typing 模块中的 Optional 类型为字段指定默认值并声明可选。
代码如下:
from typing import Optionalclass User(BaseModel):    idint    name: str    email: str    age: Optional[int] = None  # Optional field with a default value of Noneuser = User(id=1, name="John Doe", email="john.doe@example.com")print(user.age)  # Output: None





05


自定义验证器

大家可以使用 @validator 装饰器定义自定义验证的逻辑:
from pydantic import validator
class User(BaseModel):    idint    name: str    email: str
    @validator('name')    def name_must_contain_space(cls, value):        if ' ' not in value:            raise ValueError('Name must contain a space')        return value
try:    user = User(id=1, name="JohnDoe", email="john.doe@example.com")except ValidationError as e:    print(e)

结果如下:

image.png





06


嵌套类型

Pydantic 支持嵌套类型,允许大家创建更为复杂的数据结构:
class Address(BaseModel):    street: str    city: str    zipcode: str
class User(BaseModel):    idint    name: str    address: Address
address_data = {'street''123 Main St''city''Anytown''zipcode''12345'}user_data = {'id'1'name''John Doe''address': address_data}
user = User(**user_data)print(user)

结果如下:

image.png






07


读取环境变量

Pydantic 可以从环境变量中读取设置,这对管理配置非常有用:
from pydantic import BaseSettingsclass Settings(BaseSettings):    app_name: str    admin_email: str    class Config:        env_file = '.env'settings = Settings()print(settings.app_name)print(settings.admin_email)

创建包含以下内容的 .env 文件:

APP_NAME=My Awesome AppADMIN_EMAIL=admin@example.com

通过以上设置,Pydantic 就能将环境变量加载到设置代码中。






08


序列化和反序列化

Pydantic model可轻松转换为字典和 JSON,也可从字典和 JSON 转换为 Pydantic model
from pydantic import BaseModelclass User(BaseModel):    idint    name: str    email: str# Example usageuser = User(id=1, name="John Doe", email="john.doe@example.com")# Convert model to dictionaryuser_dict = user.model_dump()print(user_dict)# Convert model to JSONuser_json = user.model_dump_json()print(user_json)# Create model from dictionarynew_user = User(**user_dict)print(new_user)
结果输出如下:
image.png





09


结论

Pydantic 通过类型注解为 Python 提供了强大的数据验证与解析机制。它不仅能简化数据完整性的保障流程,同时助力开发者编写更简洁、可读性更高的代码。无论是开发简单应用还是构建复杂系统,Pydantic 都是 Python 开发工具链中不可或缺的利器。




点击上方小卡片关注我




添加个人微信,进专属粉丝群!



【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读23
粉丝0
内容573