1. 全量更新(PUT方法)
1 | from fastapi.encoders import jsonable_encoder |
- 使用HTTP PUT方法实现完整数据替换
- 未传值的字段会被重置为模型默认值(如tax字段未传则重置为10.5)
- 通过
jsonable_encoder自动转换数据类型(如datetime转为ISO字符串)
2. 部分更新(PATCH方法)
1 |
|
- 使用HTTP PATCH方法仅更新已传递的字段
- 核心步骤:
- 从存储中获取原始数据并转换为Pydantic模型
- 使用
.dict(exclude_unset=True)过滤未修改字段 - 通过
.copy(update=...)创建包含新数据的模型副本 - 使用
jsonable_encoder处理嵌套类型转换
3. 数据更新策略对比
| 方法 | 数据覆盖范围 | 默认值处理 | 适用场景 |
|---|---|---|---|
| PUT | 全量替换 | 未传字段使用默认值 | 完整资源替换场景 |
| PATCH | 部分更新 | 保留原有未传字段的值 | 局部字段更新场景 |
4. 嵌套模型更新注意事项
1 | # 处理嵌套模型时需要特别注意字段合并逻辑 |
- 深层嵌套字段更新需逐层应用
.copy(update=)方法 - 字典类型字段更新会完全替换原有键值对(非合并)
- 建议对复杂结构实现自定义合并逻辑
5. 生产环境最佳实践
- 使用
response_model确保响应数据结构一致 - 对敏感字段添加额外验证逻辑(如密码哈希处理)
- 数据库操作推荐使用异步ORM(如SQLAlchemy 2.0+)
- 通过
exclude_unset=True避免覆盖未修改字段