刚学 Alembic 很懵?把它当成数据库的 Git 就懂了
刚学 Alembic 很懵?把它当成数据库的 Git 就懂了
刚接触 Alembic 时,感觉它和 Git 很像 —— 都是"版本管理",到底区别在哪?希望这篇文章可以帮你理清。如果你对Git本身还不太熟悉,可以先看这篇《从内存与磁盘出发,彻底搞懂Git的存储原理》。
先说结论
它们都属于"版本管理"的范畴,但管理的对象和层级完全不同:
- Git:管理代码文件的版本控制工具
- Alembic:管理数据库结构变迁的迁移工具
在 Python 开发(尤其是使用 SQLAlchemy 框架)中,大家常把 Alembic 形象地称为 "数据库的 Git"。
一、核心差异对比表
| 维度 | Git | Alembic |
|---|---|---|
| 管理对象 | 项目的源代码、文档等普通文件 | 数据库的表结构(Schema)、字段、索引等 |
| 核心动作 | git commit(生成快照)、git checkout(切换版本) |
alembic revision(生成迁移脚本)、alembic upgrade/downgrade(切换版本) |
| 版本记录方式 | 将变更保存在本地的 .git 隐藏目录中 |
将迁移脚本保存在 versions/ 文件夹,并在数据库里建一张 alembic_version 表记录当前版本号 |
| 典型命令 | git commit(提交)、git log(查看历史) |
alembic revision(生成迁移脚本)、alembic upgrade(执行升级) |
二、实际工作中如何配合?
在真实的团队协作中,Git 和 Alembic 是搭档关系,而非替代关系:
场景:你修改了 ORM 模型,需要同步数据库结构
- 改代码 → 修改项目里的 Python 代码(比如给 User 模型加了新字段)
- 生成迁移脚本 → 运行
alembic revision --autogenerate -m "add_column",生成迁移文件(如abc123_add_column.py) - 代码入库 → 把这个迁移脚本当作普通代码文件,
git add、git commit并git push到仓库 - 队友同步 → 队友
git pull拉取最新代码后,运行alembic upgrade head,本地数据库自动同步到最新结构
# 你的操作:
$ alembic revision --autogenerate -m "add email column"
# 运行前先检查当前数据库版本
alembic current
# 如果返回空(首次使用),需先 stamp head
alembic stamp head
# 上传到仓库
$ git add .
$ git commit -m "feat: add email column to user table"
$ git push origin main
# 队友的操作:
$ git pull origin main
$ alembic upgrade head # 数据库结构自动升级
head代表迁移链中的最新版本,类似于Git中的HEAD指针。
关于 --autogenerate
--autogenerate 很强大,但它不是万能的。
你可以把它想象成一个“自动导航” —— 它能帮你规划大致路线(检测到表名或字段的新增/删除),但无法处理复杂路况(比如重命名表、修改数据类型、迁移历史数据)。这些场景需要你手动编辑迁移脚本,告诉Alembic该怎么做。
建议: 用 --autogenerate 生成草稿,然后手动审查和修改。 不要盲目信任它,也无需因为它有局限就不敢使用,把它当成一个高级助手就可以。
三、选择哪个工具?
| 你做了什么 | 用哪个工具 |
|---|---|
修改了 .py 文件 |
Git |
| 修改了数据库表结构 | Alembic |
| 既改代码又改数据库 | 两个工具一起 |
四、误区
| 误区 | 正解 |
|---|---|
| "Alembic 可以替代 Git" | ❌ 不能。Alembic 不管代码文件,只生成迁移脚本 |
| "Alembic 迁移脚本不用提交到 Git" | ❌ 必须提交。迁移脚本是代码的一部分,需要版本控制和团队协作 |
| "Git 能回滚数据库结构" | ❌ 不能。Git 只保存迁移脚本的代码,真正执行回滚的是 alembic downgrade |
总结
- Git 负责管理你所有的代码文件(其中也包含了 Alembic 生成的迁移脚本)
- Alembic 负责在脚本被运行时,精准地控制数据库结构的版本演变
两者各司其职,配合默契,才是 Python 后端开发的正确打开方式。
参考链接
💡 声明:本文借助 AI 辅助工具进行资料整理与初稿生成,所有内容均经过作者本人的详细核对、修改与编排,文责自负。

浙公网安备 33010602011771号