自学内容网 自学内容网

python:pydantic 数据验证和序列化库

Pydantic 是一个 Python 库,用于数据验证和设置管理。它基于 Python 类型注解(type hints)来定义数据模型,并且自动处理数据的验证、解析和序列化。这使得 Pydantic 非常适合于处理复杂的数据结构,尤其是在构建 API、处理配置文件或进行数据交换时。

主要特性

  1. 数据验证:基于 Python 类型注解,Pydantic 可以自动验证数据的类型、范围等。
  2. 设置管理:可以轻松地将环境变量或配置文件中的设置映射到数据模型中。
  3. 序列化/反序列化:支持将模型实例转换为字典(序列化)或从字典创建模型实例(反序列化)。
  4. 编辑器支持:由于使用了类型注解,大多数现代代码编辑器(如 VSCode、PyCharm)都能提供自动补全和类型检查。
  5. JSON Schema:自动生成与模型对应的 JSON Schema,便于与前端或其他系统进行数据接口定义。

基本用法

首先,你需要安装 :pip install pydantic
 pydantic-2.10.5-py3-none-any.whl (431 kB)
 pydantic_core-2.27.2-cp310-cp310-win_amd64.whl (2.0 MB)

然后,你可以定义一个数据模型:

from pydantic import BaseModel, Field, validator
from typing import Optional, List
 
class User(BaseModel):
    id: int
    name: str = Field(..., title="The name of the user", max_length=50)
    signup_ts: Optional[float] = None
    tags: List[str] = []
 
    @validator('name')
    def name_must_contain_space(cls, v):
        if ' ' not in v:
            raise ValueError('name must contain a space')
        return v

在这个例子中:
id 是一个必需的整数。
name 是一个必需的字符串,最长50个字符,并且必须包含空格(通过自定义验证器实现)。
signup_ts 是一个可选的浮点数。
tags 是一个字符串列表,默认为空列表。
你可以创建这个模型的实例:

user = User(id=1, name='John Doe', signup_ts=15162390, tags=['admin', 'user'])

# 如果尝试创建不符合要求的实例,比如名字不包含空格:
# 这将引发 ValueError
invalid_user = User(id=2,  name='johndoe',  signup_ts=15162390)

# pydantic 还支持从字典创建实例和将实例序列化为字典:
user_dict = {'id': 3, 'name': 'Jane Doe', 'signup_ts': 15162390, 'tags': ['user']}
user_from_dict = User(**user_dict)
print(user_from_dict.dict())

环境变量和配置文件

pydantic 也支持从环境变量或配置文件中加载设置。例如:

from pydantic import BaseSettings, AnyUrl
 
class Settings(BaseSettings):
    app_name: str = "My Awesome App"
    admin_email: AnyUrl = "mailto:admin@example.com"
    items_per_user: int = 50
 
    class Config:
        env_file = ".env"  # 指定环境变量文件
 
settings = Settings()
print(settings)

在这个例子中,Settings 类从 .env 文件或环境变量中读取配置,并将其映射到类的属性上。

Pydantic 是一个强大且灵活的工具,适用于各种需要数据验证和管理的场景。它的设计使得代码更加清晰、易于维护,并且减少了手动数据验证带来的错误。

编写一个测试例子 test_pydantic.py  如下

# -*- coding: utf-8 -*-
""" test pydantic """
from pydantic import BaseModel, ValidationError

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

# valid input
user = User(id=1, name="john doe", email="john@test.com")
print(user)

# invalid input
try:
    user = User(id="xxx", name="jane", email="jane@test.com")
except ValidationError as err:
    print(err)

运行 python test_pydantic.py 

运行 cmd
cd \python\myenv\Scripts
activate
pip install zhipuai
pip show zhipuai

(myenv) D:\python\myenv\Scripts>pip show zhipuai
Name: zhipuai
Version: 2.1.5.20250106
Summary: A SDK library for accessing big model apis from ZhipuAI
Home-page:
Author: Zhipu AI
Author-email:
License:
Location: d:\python\myenv\lib\site-packages
Requires: cachetools, httpx, pydantic, pydantic-core, pyjwt
Required-by:

请看 智谱AI 一个 pydantic 应用实例:
D:\python\myenv\Lib\site-packages\zhipuai\core\_request_opt.py


原文地址:https://blog.csdn.net/belldeep/article/details/145214764

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!