首页 > 解决方案 > 使用 sqlalchemy/alembic 为现有数据库创建“零状态”迁移,并为该现有数据库“伪造”零迁移

问题描述

我想将 alembic 添加到现有的 sqlalchemy 项目中,并使用工作生产数据库。我找不到执行“零”迁移的标准方法==像现在一样设置数据库的迁移(对于设置环境的新开发人员)

目前,我已将声明性基类和所有使用它的模型添加到 env.py 中,但第一次alembic -c alembic.dev.ini revision --autogenerate确实创建了现有表。

而且我需要在现有安装上“伪造”迁移 - 使用代码。对于 django ORM,我知道如何完成这项工作,但我找不到使用 sqlalchemy/alembic 执行此操作的正确方法

标签: pythonsqlalchemyalembic

解决方案


alembic revision --autogenerate检查已连接数据库的状态和目标的状态,metadata然后创建一个迁移,使其database符合metadata.

如果您要引入alembic/sqlalchemy现有数据库,并且您想要一个迁移文件,该文件给定一个空的、新的数据库将重现当前状态 - 请按照以下步骤操作。

  1. 确保您metadata真正符合您的当前database(即确保运行alembic revision --autogenerate创建一个零操作的迁移)。

  2. 创建一个temp_db空的新的并将您sqlalchemy.url指向alembic.ini这个新的temp_db.

  3. 运行alembic revision --autogenerate。这将创建您所需的批量迁移,从而使新数据库与当前数据库保持一致。

  4. 删除temp_db并重新指向sqlalchemy.url您现有的数据库。

  5. 运行alembic stamp head。这告诉 sqlalchemy 当前的迁移代表了数据库的状态——所以下次你运行alembic upgrade head它将从这个迁移开始。


推荐阅读