01
引言
Pydantic 是一个功能强大的 Python 库,用于通过类型提示实现数据验证和设置管理。本文将逐步介绍 Pydantic 的基础知识,包括安装步骤、创建示例、数据验证,以及自定义验证器等高级功能。
02
首先,我们需要安装 Pydantic。大家可以使用 pip 进行安装 , 安装命令如下所示:
pip install pydantic
03
from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: str# Example usageuser = User(id=1, name="John Doe", email="john.doe@example.com")print(user)
如果输入数据不符合预期类型,Pydantic 会引发 ValidationError:
from pydantic import ValidationErrortry:user = User(id="one", name="John Doe", email="john.doe@example.com")except ValidationError as e:print(e)
上述代码输出如下:

可以看到,上述代码将打印错误信息,因为 id 应为整数,但提供输入却是字符串。
04
from typing import Optionalclass User(BaseModel):id: intname: stremail: strage: 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
from pydantic import validatorclass User(BaseModel):id: intname: stremail: str@validator('name')def name_must_contain_space(cls, value):if ' ' not in value:raise ValueError('Name must contain a space')return valuetry:user = User(id=1, name="JohnDoe", email="john.doe@example.com")except ValidationError as e:print(e)
结果如下:
06
class Address(BaseModel):street: strcity: strzipcode: strclass User(BaseModel):id: intname: straddress: Addressaddress_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)
结果如下:
07
from pydantic import BaseSettingsclass Settings(BaseSettings):app_name: stradmin_email: strclass 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
from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: 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)
09
点击上方小卡片关注我
添加个人微信,进专属粉丝群!

