# Alembic 数据库迁移管理规范 ## 1. 概述 本规范旨在确保团队在使用 Alembic 进行数据库迁移管理时的一致性和可靠性,特别是在开发过程中对数据库模型的变更进行版本控制。 ## 2. 版本管理规范 ### 2.1 迁移文件命名规则 **统一采用以下命名格式**: ``` _.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 进行数据库迁移管理的开发人员,应严格遵守。如有特殊情况需要偏离本规范,应提前与团队沟通并获得批准。