Python Django是否有像South这样的SQLAlchemy自动迁移工具?

Python Django是否有像South这样的SQLAlchemy自动迁移工具?,python,database,migration,sqlalchemy,Python,Database,Migration,Sqlalchemy,Django是否有像South这样的SQLAlchemy自动迁移工具 我看了看,但它似乎并没有自动生成sql更新脚本或升级降级数据库 看起来使用sqlalchemy迁移时需要 a) 手动将旧模型复制到新文件 b) 将应用程序中的新模型装入板条箱,并将其复制到新文件中 c) 用python sqlalchemy扩展方言手动编写创建/删除/更改表 d) 生成SQLALTER脚本 e) 运行命令以执行ALTERSQL脚本 对我来说,这并不能解决问题,只会增加开销,因为我可以简单地用d)手动完成,而且比

Django是否有像South这样的SQLAlchemy自动迁移工具

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

看起来使用sqlalchemy迁移时需要 a) 手动将旧模型复制到新文件 b) 将应用程序中的新模型装入板条箱,并将其复制到新文件中 c) 用python sqlalchemy扩展方言手动编写创建/删除/更改表 d) 生成SQLALTER脚本 e) 运行命令以执行ALTERSQL脚本

对我来说,这并不能解决问题,只会增加开销,因为我可以简单地用d)手动完成,而且比用a)、b)、c)手动完成要快得多,只需用d)一步即可完成

是否有针对SQLAlchemy的自动迁移库,如South for Django,或许多类似RoR的迁移工具

我需要的是在python应用程序中更改SQLAlchemy模型,运行该工具,它将比较当前的DB模式和新模型应该使用的新DB模式,并创建我可以手动调整和执行的Alter脚本


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

您是否考虑过使用
sqlalchemy migrate

有一些看起来很有希望的方法,但问题是(目前)对SQlite数据库的支持非常有限。

不,目前还没有。Alembic要求您编写有关添加/删除/更改表结构或创建/删除表的代码。因此,sqlalchemy不存在django south这样的产品。

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

  • 表增加和删除
  • 柱的添加和删除
  • 更改列上的可空状态
  • 索引、显式命名的唯一约束和外键的基本更改
(另见:)

安装alembic 或者(取决于您使用的Python版本):

配置alembic 在项目中执行以下命令:

alembic init alembic
这将在名为
alembic
的文件夹中为您的项目设置alembic

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

在文件
env.py
中,告诉Alembic在项目中哪里可以找到SQLAlchemy的
元数据
对象

(另见:)

生成迁移 只需执行以下命令行:

alembic revision --autogenerate -m "Message for this migration"
甚至(不推荐):

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

alembic upgrade head

(另请参见:)

我能够使用博客文章中的方法从模型中更新DB,但它只适用于最简单的模型-只要您希望它从具有FKs、许多关系的模型中创建DB-它就会失败,并出现关于不存在的相关表及其ID的奇怪SQLAlchemy异常,虽然同一个模型很容易使用本机SQLAlchey create_all()填充DB,但我不确定为什么一个可以工作,而另一个不行。看起来SA migrate在使用FK创建特定表时不知道相关表。您是否深入研究代码并尝试修复错误?我认为sqlalchemy migrate是您能找到的最接近解决方案。我尝试使用
alembic
。我必须为自动递增的id插入一个序列,并且必须使用SQL为特定的数据库类型编写代码。所以我把它扔了。此外,我不理解它的“代码库”风格
South
使用起来更简单、更强大,我不了解alembic开发人员的技术选择。您使用的是哪种引擎?我的机器上的postgres,oracle正在生产中。看看这个:+Marco Sulla,这是Alembic的全部观点,显式而非隐式。我想到的最简单的解决方案是改变迁移中使用的sql语法的不同环境变量。但不要期望它自动化超过20%的工作。我参与了一个需要Flask的项目,第一次迁移需要表a引用表B,B引用a。它需要手动干预。所以是的…这不是真的,alembic可以从当前元数据中找出转换。
alembic revision --autogenerate -m "Message for this migration"
alembic revision --autogenerate
alembic upgrade head