有没有像Django的South一样的SQLAlchemy自动迁移工具?

30 投票
4 回答
8423 浏览
提问于 2025-04-16 12:10

有没有像Django的South那样的SQLAlchemy自动迁移工具?

我查了一下sqlalchemy-migrate,但它似乎不能自动生成SQL更新脚本,也不能自动升级或降级数据库。

看起来使用sqlalchemy-migrate你需要:
a) 手动把旧的模型复制到一个新文件中
b) 在应用程序中创建新的模型,并把它复制到一个新文件中
c) 手动用Python的SQLAlchemy扩展语法写创建/删除/修改表的代码
d) 生成SQL修改脚本
e) 运行命令来执行修改的SQL脚本

对我来说,这并没有解决问题,反而增加了工作量,因为我可以直接手动做d),这样比手动做a)、b)、c)再到d)要快得多。

有没有像Django的South或许多类似RoR的迁移工具那样的SQLAlchemy自动迁移库?

我需要的是在Python应用中更改SQLAlchemy模型,运行工具后,它会比较当前的数据库结构和新的模型应该使用的新数据库结构,然后生成可以手动调整并执行的修改脚本。

Python中有没有这样的解决方案?

4 个回答

-1

目前没有这样的工具。Alembic 需要你自己写代码来添加、删除或修改表的结构,或者创建和删除表。所以在 SQLAlchemy 中并没有像 Django South 那样的功能。

8

有一个叫Alembic的工具,看起来很不错。不过现在的问题是,它对SQlite数据库的支持非常有限。

15

你可以使用 Alembic 来进行自动迁移。我在目前正在进行的两个大型项目中都用到了它。这个自动迁移生成器可以识别:

  • 表的添加和删除
  • 列的添加和删除
  • 列的可空状态变化
  • 索引、显式命名的唯一约束和外键的基本变化

(更多信息请查看: https://alembic.sqlalchemy.org/en/latest/autogenerate.html

安装 alembic

pip install alembic

或者(根据你使用的 Python 版本):

pip3 install alembic

配置 alembic

在你的项目中执行以下命令:

alembic init alembic

这会在一个名为 alembic 的文件夹中为你的项目设置 alembic。

然后你需要编辑生成的 alembic.ini 配置文件。

env.py 文件中,告诉 Alembic 在你的项目中哪里可以找到 SQLAlchemy 的 metadata 对象。

(更多信息请查看: https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file

生成迁移

只需执行以下命令行:

alembic revision --autogenerate -m "Message for this migration"

或者(不推荐):

alembic revision --autogenerate

升级数据库

之后,我会在包含 alembic.ini 配置文件的文件夹中用这个简单的命令来升级数据库:

alembic upgrade head

(更多信息请查看: http://rodic.fr/blog/automatic-migrations-sqlalchemy-alembic/

撰写回答