pydantic是python生态中最流行的数据验证和解析库。绝大多数的web框架(如fastapi)和大模型框架langchain都是基于它构建。简单说他是一个基于type hints的库。其核心功能有两个,分别是:
- 数据验证(validation):确保你拿到的数据,符合你定义的格式
- 数据解析(parsing):把凌乱的输入,自动转换成正确的类型
只要模型实例化成功,你就可以百分之百信任这个对象里的数据类型是完全正确的。
一、基本用法
pip install pydantic
1、定义模型
使用 basemodel 类来创建数据模型:
from pydantic import basemodel
class user(basemodel):
name: str
age: int # 如果不匹配,pydantic 会尝试强制转换
is_active: bool = true # 可以有默认值2、实例化与验证
# 从字典创建实例
user = user(name="alice", age="25") # 注意:age 是字符串,但会被转为 int
print(user.name) # alice
print(user.age) # 25 (int)
print(user.is_active) # true
# 访问原始数据
print(user.model_dump()) # {'name': 'alice', 'age': 25, 'is_active': true}如果数据不合规,pydantic 会抛出清晰的错误提示,而不是让程序在后续运行中崩溃。
from pydantic import validationerror
try:
user(name="bob", age="not_a_number")
except validationerror as e:
print(e.json()) # 会详细列出格式错误3、字段约束
字段约束不仅能检查“类型”对不对,还能检查“内容”是否符合业务规则(比如:年龄不能是负数、密码不能太短)。使用 field 来添加额外的验证规则:
from pydantic import basemodel, field
class product(basemodel):
name: str = field(min_length=2, max_length=50)
price: float = field(gt=0) # 必须大于 0
tags: list[str] = field(default=[], min_items=1)
# 示例
product(name="laptop", price=999.99, tags=["electronics"])| 约束缩写 | 全称 | 适用类型 | 说明 |
gt | greater than | int, float | 大于 |
ge | greater than or equal | int, float | 大于等于 |
lt | less than | int, float | 小于 |
le | less than or equal | int, float | 小于等于 |
min_length | - | str, list, dict | 最小长度 |
max_length | - | str, list, dict | 最大长度 |
pattern | - | str | 正则表达式匹配 |
allow_inf_nan | - | float | 是否允许无穷大或 nan |
4、嵌套使用
可以将不同的数据模型嵌套起来使用。
from typing import list, optional
from pydantic import basemodel, field
# 1. 定义底层模型:商品
class item(basemodel):
name: str
price: float
quantity: int = field(gt=0, description="数量必须大于0")
# 2. 定义底层模型:收货地址
class address(basemodel):
city: str
street: str
zip_code: optional[str] = none
# 3. 定义顶层模型:订单(嵌套了 item 和 address)
class order(basemodel):
order_id: int
items: list[item] # 嵌套商品列表
address: address # 嵌套地址对象
remark: str = "无"
# --- 模拟原始数据(例如来自前端请求或数据库) ---
raw_data = {
"order_id": 1001,
"items": [
{"name": "键盘", "price": 299.0, "quantity": 1},
{"name": "鼠标", "price": 99.5, "quantity": 2}
],
"address": {
"city": "上海",
"street": "南京东路 123 号"
}
}
# 解析数据
order = order(**raw_data)
# 访问嵌套数据
print(f"订单 id: {order.order_id}")
print(f"第一件商品名称: {order.items[0].name}") # 自动补全非常爽
print(f"收货城市: {order.address.city}")- 多级校验:当你实例化
order时,pydantic 会递归校验。如果items列表里第二个商品的price格式不对,它会准确告诉你报错位置。 - ide 自动补全:在编写代码时,输入
order.address.后,ide 会自动提示city和street。这避免了手动处理字典时经常出现的拼写错误。 - 自动转换:如果
items里的price传的是字符串"99.5",pydantic 会自动帮你转成float。
二、常见应用场景
最常见的场景当然是web api。可以用它来定义 api 的请求体和响应体。fastapi 会自动根据你的 pydantic 模型生成文档,并自动校验前端传来的 json 数据。其次是进行配置管理,从环境变量或配置文件加载并验证配置。通过 pydantic-settings 扩展,可以轻松读取环境变量(.env 文件)。
pip install pydantic-settings
from pydantic_settings import basesettings
class settings(basesettings):
db_url: str
api_key: str
class config:
env_file = ".env"
settings = settings() # 自动从环境变量加载并校验到此这篇关于python的pydantic概念及基本用法的文章就介绍到这了,更多相关python pydantic内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论