【问题标题】:Making changes to flask app without db.drop_all(), db.create_all()在没有 db.drop_all()、db.create_all() 的情况下更改烧瓶应用程序
【发布时间】:2019-07-27 13:22:19
【问题描述】:

我有一个部署在 Google 的 App Engine 上的烧瓶应用。我注意到一个小错误,我想修复它,但我的数据库已经填充。

我怎样才能在不丢失所有数据的情况下进行这个小的代码更改并将其推送/部署回我的应用程序? (这可能是一个基本问题,但我没有找到太多。所有在线教程都专注于创建应用程序和部署,而不是更新)

到目前为止,每当我重新部署时,我都会删除并重新创建表,这主要是出于无知。这是我遵循的步骤

  1. 1)。在我的应用中进行更改
  2. 提交并推送对 bitbucket 源代码的更改
  3. 在 Google Cloud SDK 中:git pull
  4. Google Cloud SDK:gcloud 应用部署

这些步骤会导致一个空数据库,因为我从本地计算机推送的目录有一个空数据库。这是我应该使用 git merge 的地方吗?

这是数据库“迁移”还是“git 合并”?我不确定使用什么正确的术语来进一步研究。谢谢。

【问题讨论】:

    标签: google-app-engine flask flask-sqlalchemy git-merge flask-migrate


    【解决方案1】:

    您的问题有几个角度。我将尝试为您提供一些信息,但让我警告您,这不会对您的工作流程进行微不足道的更改,您必须更改一些内容。

    首先,根据您提出问题的方式,我认为您将数据库与代码一起提交给 git。如果我做对了,那么这就是你需要停止做的事情。数据库不是代码,因此不应提交源代码管理。

    您的应用程序的每次安装都应该有一个完全独立的数据库。例如,您将在自己的机器上拥有一个数据库来进行开发。您还需要在 gcloud 部署中使用另一个数据库。如果您的应用程序有其他用途,您可能需要更多数据库。对于许多人来说,非常常见的第​​三个数据库是用于自动化测试的数据库,它也可以位于您的本地开发机器中,但与您用于日常开发的数据库不同。

    要更改您的数据库架构,您将不再删除和重新创建表,这显然是您已经意识到需要改进的地方。进行这些更改的一个好方法是使用数据库迁移框架。这些工具允许您生成简短的脚本,以更集中的方式对数据库进行这些更改,而不会破坏和重新创建所有内容,因此,数据通常不会丢失。对于 Flask-SQLAlchemy,数据库迁移的最佳选择是 Flask-Migrate,它是围绕 Alembic 迁移框架的轻量级包装器。 (我可能在这里有偏见,因为我是 Flask-Migrate 扩展的作者!)。

    Flask-Migrate 的文档:https://flask-migrate.readthedocs.io/en/latest/

    【讨论】:

    • 谢谢,米格尔。我实际上是按照您可以在此处为其他用户找到的精彩教程安装和设置 Flask-Migrate:blog.miguelgrinberg.com/post/… 所以,当您说我“应该在每次安装应用程序时都有一个完全独立的数据库”时,我想这意味着我应该有一个使用 Google 的 RDS 产品的云数据库?
    • 是的。可以是来自 Google 的数据库特定产品,也可以是云实例中的自托管数据库。这两个选项都有效。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多