第二章:快速上手:你的第一个模型
2.1 三分钟入门
Pydantic 的核心是 BaseModel。所有数据模型都继承它:
python
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
is_active: bool = True # 带默认值,可选字段
# 创建实例 = 校验数据
user = User(name="小明", age="18") # 注意 age 传的是字符串!
print(user.name) # 小明
print(user.age) # 18 —— 自动转成了 int!
print(user.is_active) # True —— 用了默认值看到了吗?age="18" 传的是字符串,Pydantic 自动做了合理的类型转换。这叫"智能解析",是 Pydantic 的招牌能力。
2.2 校验失败会发生什么?
python
User(name="小明", age="十八")抛出 ValidationError,信息非常友好:
1 validation error for User
age
Input should be a valid integer, unable to parse string as an integer
[type=int_parsing, input_value='十八', input_type=str]它告诉你:哪个模型、哪个字段、期望什么、实际收到什么。调试体验一流。
2.3 从字典 / JSON 创建数据
实际工作中数据往往来自字典或 JSON 字符串:
python
# 从字典
data = {"name": "小红", "age": 20}
user = User.model_validate(data) # v1 写法:User.parse_obj(data)
# 从 JSON 字符串
json_str = '{"name": "小红", "age": 20}'
user = User.model_validate_json(json_str) # v1 写法:User.parse_raw(json_str)2.4 和 dataclass 的区别?
Python 自带的 @dataclass 也能定义数据结构,但它 不做校验,只是帮你省去写 __init__。Pydantic 模型 = dataclass 的便利性 + 强大的运行时校验。Pydantic 也提供了校验版的 dataclass(pydantic.dataclasses.dataclass),但绝大多数场景用 BaseModel 就够了。