alembic - 如果您没有开始使用 alembic/flask-migrate 迁移现有数据库,如何添加它?

标签 alembic flask-migrate

这是已经发生和正在发生的事件链

  • 第 0 天:我开发并部署了我的应用程序
  • 第 1 天:我创建了新数据库
  • 第 3 天:我意识到我想在现有表中添加一个新行。我找到了flask-migrate,我想用它来迁移我的数据库。

  • 目前我在第 3 天

    如果您从第 0 天开始,有很多关于如何让 Flask-migrate 运行的文档。您只需调用 flask db init , flask db migrateflask db upgrade .

    但是,就我而言,它有点不同。我运行了命令,我的第一个迁移版本是空的。然后我修改了我的数据库模式并生成了一个新的迁移。现在我最新的迁移只有 1 行迁移,它将新行添加到表中。

    我意识到我的所有迁移都没有创建数据库的实际架构,如果您在第 1 天开始 flask 迁移,这应该是您看到的第一个迁移。

    如果我要从头开始克隆我的仓库:
    flask db migrate将导致 alembic.util.exc.CommandError: Target database is not up to date. .
    flask db upgrade将导致 sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "offer" does not exist .

    我能做些什么来解决这个问题?

    最佳答案

    你有两个选择。

    1)如果您只想跟踪数据库迁移

  • 运行flask db init , 创建迁移存储库。
  • 将新列添加到您的数据库模型。
  • 运行flask db migrate , 生成迁移。迁移脚本中只会包含新列。
  • 运行flask db upgrade将新迁移应用到您的数据库。

  • 此时您的数据库应该有新列,您可以继续工作。每当您需要进行其他更改时,请重复上述步骤。

    请注意,使用这种方法,您无法从头开始重新创建整个数据库。您必须有一种方法将数据库初始化为您在第 1 天拥有的模式,然后您可以将迁移历史应用到该模式以将其升级到您当前的模式。

    2) 如果您想跟踪整个迁移历史记录,包括将 Flask-Migrate 添加到应用程序当天的架构。

    这有点棘手,但可以做到。
  • flask db init 开始, 创建迁移存储库。
  • 接下来,您需要让 Flask-Migrate 认为您的数据库是空的。您可以通过重命名您的实际数据库并创建一个具有相同名称但其中没有表的新数据库来做到这一点。在该状态下,运行 flask db migrate .这将生成一个包含数据库整个架构的迁移。
  • 完成初始迁移后,将数据库恢复到正确状态。
  • 运行flask db stamp head将数据库标记为已更新。
  • 将新列添加到您的数据库模型。
  • 运行flask db migrate再次,生成第二次迁移。迁移脚本中只会包含新列。
  • 运行flask db upgrade将新迁移应用到您的数据库。

  • 希望这可以帮助!

    关于alembic - 如果您没有开始使用 alembic/flask-migrate 迁移现有数据库,如何添加它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992256/

    相关文章:

    python - 填充枚举数组

    flask - 为什么 Flask-Migrate 让我进行两步迁移?

    python - 多个模型上的 Alembic 迁移

    python - 更改 Alembic 中的主键?

    python - 运行迁移时检测到表,但未在数据库中创建

    python - 在 heroku 上运行 flask-migrate 会产生错误

    python - 在 alembic 中配置 env.py 文件时使用 .env 变量

    python - flask db migrate 不要更改列设置

    python - 如何在 Docker 中运行flask_migrate

    python - Flask-Migrate 未检测到表格