Clawith/backend/ALEMBIC_GUIDELINES.md

136 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Alembic 数据库迁移管理规范
## 1. 概述
本规范旨在确保团队在使用 Alembic 进行数据库迁移管理时的一致性和可靠性,特别是在开发过程中对数据库模型的变更进行版本控制。
## 2. 版本管理规范
### 2.1 迁移文件命名规则
**统一采用以下命名格式**
```
<timestamp>_<description>.py
```
- **timestamp**:使用 `YYYYMMDDHHMM` 格式的时间戳,确保迁移文件按时间顺序排序
- **description**:使用小写字母、数字和下划线,简洁描述迁移内容
**示例**
- `202603131430_add_user_email_column.py`
- `202603140915_modify_agent_table.py`
### 2.2 版本历史管理
- **保持版本历史清晰**:每个迁移文件对应一个具体的数据库变更
- **避免合并迁移**:不要将多个不相关的变更合并到一个迁移文件中
- **版本回滚**:确保每个迁移都有对应的回滚逻辑
- **版本标记**:在重要的发布版本处添加标记,便于追踪
## 3. 开发流程规范
### 3.1 模型变更流程
1. **修改模型**:在 `app/models/` 目录中修改或添加模型
2. **生成迁移**:运行 `alembic revision --autogenerate -m "描述变更内容"`
3. **检查迁移**:手动检查生成的迁移文件,确保逻辑正确
4. **应用迁移**:运行 `alembic upgrade head` 应用到本地数据库
5. **测试验证**:确保应用正常运行,数据迁移正确
6. **提交代码**:将模型变更和迁移文件一起提交
### 3.2 协作开发流程
1. **拉取最新代码**:在开始工作前,确保拉取最新的代码和迁移文件
2. **分支管理**:在各自的分支上进行模型变更
3. **解决冲突**:如果遇到迁移文件冲突,手动解决并确保逻辑正确
4. **代码审查**:迁移文件需要经过代码审查,确保质量
5. **部署前验证**:在部署到生产环境前,在测试环境验证迁移
## 4. 最佳实践
### 4.1 迁移文件编写
- **保持简洁**:每个迁移文件只包含一个逻辑变更
- **添加注释**:对复杂的迁移逻辑添加注释说明
- **使用批量操作**:对于大量数据的迁移,使用批量操作提高性能
- **处理默认值**:为新增字段提供合理的默认值
- **考虑数据完整性**:确保迁移过程中数据的完整性
### 4.2 性能优化
- **索引创建**:在迁移中合理创建索引,提高查询性能
- **分批处理**:对于大型表的变更,使用分批处理避免锁表
- **事务管理**:合理使用事务,确保迁移的原子性
### 4.3 安全性
- **避免破坏性操作**:谨慎使用 `drop_table` 等破坏性操作
- **数据备份**:在执行重要迁移前,确保数据已经备份
- **权限控制**:确保迁移操作使用适当的数据库权限
## 5. 命令参考
### 5.1 常用命令
- **生成迁移**
```bash
alembic revision --autogenerate -m "描述变更内容"
```
- **应用迁移**
```bash
alembic upgrade head
```
- **回滚迁移**
```bash
alembic downgrade -1 # 回滚一个版本
alembic downgrade base # 回滚到初始状态
```
- **查看迁移历史**
```bash
alembic history
```
- **查看当前版本**
```bash
alembic current
```
### 5.2 环境变量
- 数据库连接字符串通过 `app/config.py` 中的 `DATABASE_URL` 配置
- 开发环境和生产环境应使用不同的数据库连接
## 6. 故障处理
### 6.1 迁移失败
1. **分析错误**:查看错误信息,确定失败原因
2. **回滚操作**:如果迁移失败,使用 `alembic downgrade` 回滚到上一个版本
3. **修复问题**:修复模型或迁移文件中的问题
4. **重新迁移**:再次运行迁移命令
### 6.2 数据丢失
- **立即停止**:发现数据丢失时立即停止操作
- **恢复备份**:使用最近的数据库备份恢复数据
- **重新迁移**:在恢复数据后,重新执行迁移
## 7. 版本控制集成
- **迁移文件**:将所有迁移文件纳入版本控制
- **忽略文件**:不要将 `alembic/versions/` 目录中的 `.pyc` 文件纳入版本控制
- **提交信息**:在提交迁移文件时,使用清晰的提交信息描述变更
## 8. 文档维护
- **更新文档**:当数据库结构发生重大变更时,更新相关文档
- **模型文档**:为复杂的模型添加文档说明
- **迁移记录**:保持迁移历史的清晰记录,便于后续维护
## 9. 附则
本规范适用于所有使用 Alembic 进行数据库迁移管理的开发人员,应严格遵守。如有特殊情况需要偏离本规范,应提前与团队沟通并获得批准。