对于Django,是否有像South的SQLAlchemy自动迁移工具?

Zel*_*lid 28 python database migration sqlalchemy

对于Django,是否有像South的SQLAlchemy自动迁移工具?

我查看了sqlalchemy-migrate,但它似乎没有自动生成sql更新脚本或升级降级数据库

看起来像sqlalchemy-migrate你需要a)手动将旧模型复制到新文件b)在应用程序中创建新模型并将其复制到新文件c)在python sqlalchemy扩展方言d中手动创建/删除/更改表)生成sql alter script e)运行命令执行alter sql脚本

至于我它没有解决问题,只增加了开销,因为我可以简单地做d)手动,它会快得多a),b),c)手动只是为了d)你可以做一个步.

SQLAlchemy是否有像JDBC for Django或许多类似RoR的迁移工具的自动迁移库?

我需要的是在python app中更改SQLAlchemy模型,运行工具,它会将当前的数据库模式与新模型应该使用的新数据库模式进行比较,并创建我可以手动调整并执行的Alter脚本.

在Python中有这样的解决方案吗?

Mat*_*dic 13

您可以使用Alembic执行自动迁移.我在目前正在进行的两个大型项目中使用它.自动迁移生成器可以识别:

  • 表格增加和删除
  • 列添加和删除
  • 列上可空状态的更改
  • 索引的基本更改,显式命名的唯一约束和外键

(另见:https://alembic.sqlalchemy.org/en/latest/autogenerate.html)

安装alembic

pip install alembic
Run Code Online (Sandbox Code Playgroud)

或(取决于您使用的Python版本):

pip3 install alembic
Run Code Online (Sandbox Code Playgroud)

配置alembic

在项目中执行以下命令:

alembic init alembic
Run Code Online (Sandbox Code Playgroud)

这将在您名为的文件夹中为您的项目设置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"
Run Code Online (Sandbox Code Playgroud)

甚至(不推荐):

alembic revision --autogenerate
Run Code Online (Sandbox Code Playgroud)

升级数据库

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

alembic upgrade head
Run Code Online (Sandbox Code Playgroud)

(另见:http://rodic.fr/blog/automatic-migrations-sqlalchemy-alembic/)


sch*_*mar 8

蒸馏器,看起来非常有前途的,但问题是,(现在),对SQLite数据库的支持是非常有限的.