Python 学习笔记:数据库迁移工具 ‌Alembic

Alembic 是 SQLAlchemy 官方推出的‌轻量级数据库迁移工具‌,核心作用是把数据库表结构的变更(建表、加列、改类型、加索引等)纳入版本控制,让你在不同环境(开发/测试/生产)里能重复、安全地把数据库升级或回滚到指定版本。‌‌

为什么需要它

直接用 Base.metadata.create_all() 只能在表不存在时创建,‌修改已有表结构不会自动同步‌。 Alembic 把每次结构变更记录成独立的迁移脚本,配合 Git 使用,团队成员执行一条命令就能同步最新结构,出问题也能回滚。

快速上手

  1. ‌安装与初始化 ‌:pip install alembic,然后 alembic init alembic,如果是异步环境则 alembic init -t async alembic。会生成 alembic.ini(配置文件)和 alembic/ 目录(含 env.py、versions/)。
  2. ‌配置数据库连接 ‌:修改 alembic.ini 里的 sqlalchemy.url 指向你的数据库地址,比如 mysql+pymysql://user:pass@localhost/dbname。生产环境不建议硬编码密码,可以在env.py里从环境变量读取,覆盖这个配置。
  3. ‌关联模型 ‌:打开 alembic/env.py,导入你的 Base,把 target_metadata = None 改成 target_metadata = Base.metadata。‌这步漏了,自动生成的迁移脚本会是空的‌。
  4. ‌生成迁移脚本 ‌:改完模型后执行 alembic revision --autogenerate -m "描述信息",Alembic 会对比模型和数据库差异,自动生成迁移脚本。
  5. ‌执行迁移 ‌:alembic upgrade head 把数据库升级到最新版本;回滚用 alembic downgrade -1(回滚一个版本)或 alembic downgrade base(全部回滚)。‌‌

常用命令速查

使用建议

  • ‌自动生成的脚本必须人工检查 ‌:--autogenerate 不是万能的,字段重命名、表重命名这类操作它可能识别成"删旧建新",导致数据丢失,需要手动改成 op.alter_column 或 op.rename_table。
  • ‌已提交的迁移脚本不要修改‌:就像不能改 Git 历史一样,新变更通过新增迁移脚本实现。
  • ‌迁移前先备份数据库‌,并在开发或测试环境充分验证后再上生产。‌‌

Alembic 在 Flask 里可以配合 Flask-Migrate 使用,FastAPI 里直接集成 SQLAlchemy 就能用。整体上手成本不高,配置好一次后,日常就是"改模型 → 生成脚本 → 执行迁移"三步循环。

相关推荐
外收内放36 分钟前
06 | 优化篇① 游戏改名《鳞光纪》了:这次翻新,把“脸“全换了
python·游戏·pygame
计算机毕业编程指导师39 分钟前
【大数据毕设选题】基于Spark的电信网络诈骗话术语义特征挖掘分析系统源码 毕业设计 选题推荐 数据分析 机器学习 深度学习
大数据·hadoop·python·spark·毕业设计·课程设计·网络诈骗
for_ever_love__44 分钟前
电商订单数据清洗实战——Pandas 处理缺失值、重复单与异常金额
python·数据分析·pandas·数据清洗
计算机毕业编程指导师1 小时前
计算机大数据毕设怎么选?基于Spark的个体肥胖健康风险评估的数据分析与可视化系统带你通关 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·肥胖风险
坤坤子吖1 小时前
Python基础语法学习:函数
开发语言·笔记·python·学习
玖石书1 小时前
linux 安装uv(python虚拟环境管理)
linux·python·uv
言乐61 小时前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据库基本操作
数据库·mysql
LOVE️YOU1 小时前
Python 类与对象的核心逻辑:从 self、cls 到点号、括号与链式调用
开发语言·python