FastAPI与Alembic数据库迁移完全指南
📂 所属阶段:第三阶段 — 数据持久化(数据库篇)
🔗 相关章节:FastAPI SQLAlchemy 2.0实战 · FastAPI依赖注入系统
目录
为什么需要数据库迁移工具?
在没有迁移工具时,我们往往靠手写SQL管理表结构,这会带来一系列问题:
Alembic的核心价值
作为SQLAlchemy官方迁移工具,它提供:
- ✅ Git式的数据库版本控制
- ✅ 自动对比模型与数据库生成脚本
- ✅ 可逆迁移,支持安全回滚
- ✅ 多环境结构一致性保证
- ✅ 完整的变更审计记录
项目依赖安装
安装命令:pip install -r requirements.txt
Alembic基础概念与项目集成
核心组件
env.py:连接数据库与SQLAlchemy模型的桥梁alembic.ini:全局配置文件versions/:存放版本化的迁移脚本script.py.mako:迁移脚本生成模板
FastAPI项目结构
初始化Alembic
配置env.py(关键步骤)
修改alembic/env.py,引入项目的SQLAlchemy Base和数据库URL:
简化alembic.ini
保留核心配置,删除冗余注释:
自动生成迁移脚本
基础命令
工作原理
- 扫描项目中的SQLAlchemy模型
- 连接数据库获取现有表结构
- 分析差异(新增/删除表、列、约束等)
- 生成包含
upgrade和downgrade的脚本
生成的脚本示例
手动编写迁移脚本
何时需要手动编写?
- 需要同时迁移现有数据
- 自动生成无法处理的复杂SQL
- 需要条件判断或性能优化
数据迁移示例:字段类型转换
版本控制与迁移命令
迁移文件依赖关系
每个迁移文件的down_revision必须指向前一个版本:
常用迁移命令
多环境与生产环境部署
多环境配置
修改app/database.py,支持不同环境:
环境特定命令
Docker部署
安全的生产迁移流程
常见陷阱与最佳实践
常见陷阱
- ❌
downgrade函数不完整:删除表前先删索引/约束 - ❌ 模型与数据库不一致:先确保当前库是
head再改模型 - ❌ 大表逐行更新:用批量SQL代替
最佳实践
- 迁移文件组织:用序号或日期前缀命名,方便排序
- 完整的upgrade/downgrade:确保两者完全对称
- 测试迁移:在测试环境先验证迁移-回滚循环
- 生产前备份:永远在执行迁移前备份数据库
推荐迁移模板
总结
Alembic为FastAPI+SQLAlchemy项目提供了完善的数据库版本控制方案,通过自动化脚本、可逆迁移和多环境支持,大幅降低了数据库结构变更的风险。
💡 关键要点:
- 始终在测试环境验证迁移
- 确保
downgrade与upgrade完全对称- 生产环境执行前必须备份
🔗 扩展阅读

