首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何添加迁移现有数据库与alembic/烧瓶-迁移,如果你没有开始它?

问如何添加迁移现有数据库与alembic/烧瓶-迁移,如果你没有开始它?
EN

Stack Overflow用户
提问于 2017-03-24 05:46:41
回答 2查看 14.1K关注 0票数 17

这是一系列已经发生和正在发生的事件。

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

现在我在第三天

如果您从第0天开始,就有很多关于如何让烧瓶迁移运行的文档。你只需打电话给flask db init,flask db migrate和flask db upgrade。

然而,对我的情况来说,这有点不同。我运行这些命令,我的第一个迁移版本是空的。然后我修改了我的数据库模式并生成了一个新的迁移。现在,我最近的迁移只有1行迁移,即将新行添加到表中。

我意识到我的迁移都没有创建数据库的实际模式,如果在第一天开始迁移,这应该是您看到的第一次迁移。

如果我要从零开始克隆我的回购:

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。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 15:00:28

你有两个选择。

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

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

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

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

2)如果您希望跟踪整个迁移历史,包括在向应用程序添加Flask时使用的模式。

这有点棘手,但这是可以做到的。

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

希望这能有所帮助!

票数 38
EN

Stack Overflow用户

发布于 2021-06-14 20:33:09

我使用了简单的步骤来跟踪整个迁移历史:

  1. 创建一个临时使用的新数据库,并使用此数据库端点。
  2. 删除迁移文件夹(如果存在)。
  3. 运行flask db init来创建新的迁移。
  4. 运行flask db migrate从零开始初始化现有模块迁移。
  5. 现在使用原始数据库端点。
  6. 运行flask db stamp head --使用正确的迁移版本在数据库中创建alembic_version表。

现在,很好地使用这个迁移到将来使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42992256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档