pydantic Model 转为 dict

创建日期: 2025-07-31 10:30 | 作者: 风波 | 浏览次数: 22 | 分类: Python

来源:DeepSeek

1. 使用 .dict()方法(Pydantic v1 和 v2 都支持)

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

user = User(name="Alice", age=25)
user_dict = user.dict()
print(user_dict)
# 输出: {'name': 'Alice', 'age': 25}

2. 使用 .model_dump()方法(Pydantic v2 推荐)

在 Pydantic v2 中,推荐使用 .model_dump()替代 .dict()

user_dict = user.model_dump()
print(user_dict)

3. 转换为 JSON 字典(包含 JSON 兼容的数据类型)

user_json_dict = user.model_dump_json()
# 这会返回 JSON 字符串,然后可以用 json.loads() 转为字典
import json
user_dict = json.loads(user_json_dict)

4. 包含或排除特定字段

# 只包含特定字段
partial_dict = user.dict(include={"name"})  # 只包含 name 字段

# 排除特定字段
partial_dict = user.dict(exclude={"age"})  # 排除 age 字段

5. 处理嵌套模型

class Address(BaseModel):
    city: str
    street: str

class UserWithAddress(BaseModel):
    name: str
    address: Address

user = UserWithAddress(name="Bob", address=Address(city="NY", street="5th Ave"))
print(user.dict())
# 输出: {'name': 'Bob', 'address': {'city': 'NY', 'street': '5th Ave'}}

6. Pydantic v2 中,.model_dump() 提供了更多选项

# 包含计算字段(computed fields)
user_dict = user.model_dump(include_computed=True)

# 排除未设置字段(默认值)
user_dict = user.model_dump(exclude_unset=True)

# 排除默认值
user_dict = user.model_dump(exclude_defaults=True)
22 浏览
11 爬虫
0 评论