Flask Migrate 和 PostgreSQL 数据更新

Flask Migrate and PostgreSQL data update

我目前正在建立一个基于 Python Flask(使用 Flask Migrate)和 PostgreSQL 数据库的项目。我在一个小团队工作,对数据库更新有一些疑问。

据我所知,如果我在 Flask 中更新数据库模式,我将不得不执行 flask db migrateflask db upgrade 来应用更改。其他收到我的更新的人执行 flask db upgrade 来接收模式更改。一切都很好,但是如果我更新了数据库中的行,我该如何将架构更改和数据更改传播给我的同行?

如果我 migrate and upgrade 我的 Flask 数据库然后使用 psql 导出转储,当我的同伴收到更新时,他们是否只是导入数据转储?或者他们也必须执行 flask db upgrade 吗?如果是这样,哪个先出现? flask db upgrade 后跟转储导入,或转储导入后跟 flask db upgrade?

我不确定简单地导入具有更新模式的数据转储是否会扰乱 Flask Migrate 中的迁移提交。不确定这是不是该问的地方,但我希望我能在这里找到一些答案。 提前致谢!

编辑:到目前为止,我正在通过删除数据库并使用转储重新创建它来更新数据库中的数据,但我还没有尝试过任何架构更改(项目正在进行中,有点慢..)

编辑 2:忘记提及所有 PostgreSQL 实例都本地托管在我们自己的机器上

Flask-Migrate和Alembic的主要目的是管理数据库架构迁移历史。通常不需要更改数据库的内容,特别是不需要完整的数据转储。

也就是说,在某些情况下,作为迁移的一部分,您确实需要更改存储在数据库中的数据。这通常被称为“种子数据”,可能包括更新可用用户角色列表或其他枚举数据元素等内容。 Alembic 允许您通过 bulk_insert and execute 操作将这些对数据库的小更改包含到迁移脚本中,这样 flask db upgrade 也会应用这些数据更改。但显然这些更改是特定于应用程序的,因此您必须在 运行 flask db migrate 之后和 运行 flask db upgrade.

之前将它们手动编码到迁移脚本中

我对Flask及其迁移机制不是很熟悉。但是,我想这离 Entity Framework 迁移功能不远了。如果是,则问题分为两部分:

首先,您需要在团队中保持数据结构 up-to-date。这是简单的部分。一旦您对代码库中的实体(数据 类)进行了更改,您就可以创建相关的迁移和 commit/push 代码。每个人,包括你自己,都只是根据可用的迁移升级数据库。在这部分,您的实际数据不会共享或发送给您的同事。

其次,您希望您的数据在人们之间共享。您在这里有一个简单的解决方案。您可以获取数据库 snapshot/backup/dump 并将其发送给所有团队。考虑到他们应该 运行 在导入数据库之前进行升级。另一种选择是在互联网上共享一个公共数据库。还有一个work-around。 Entity Framework 等一些技术允许您通过类似于播种的方式传输数据。如果这在您的平台上不可用,您可以将 SQL 脚本发布到 create/update 所需的数据。