2

使用此设置:

-Development environment
-Flask
-SQLAlchemy
-Postgres
-Possibility Alembic

如果我有一个数据库,其中一些表填充了随机数据。据我所知,将使用 Alembic的Flask-Migrate不会保留数据,只会保持模型和数据库同步。

但是使用 Alembic 或只是删除 > 创建所有表有什么区别?

就像是:

db.create_all()

第二个问题:

当模型发生变化时,数据会发生什么变化?数据会丢失吗?或者 Alembic 可以保留以前填充的数据?

好吧,我的想法只是用一些数据填充数据库,然后在模型更改时避免任何数据丢失。Alembic是解决方案吗?

或者我需要从 .sql 文件导入数据,例如,当我更改模型和数据库时?

4

1 回答 1

14

我是 Flask-Migrate 的作者。

你不正确。Flask-Migrate(通过 Alembic)将始终保留您在数据库中的数据。这就是使用数据库迁移的重点,您不想丢失数据。

看来您已经有了一个包含数据的数据库,并且您想开始使用迁移。您有两个选项可以将 Flask-Migrate 合并到您的项目中:

  1. 只跟踪未来的迁移,即将您的初始数据库模式留在迁移跟踪之外。

    为此,您真的没有什么特别的事情可做。只需manage.py db init创建迁移存储库,当您需要迁移数据库时,通常使用manage.py db migrate. 这种方法的缺点是 Flask-Migrate/Alembic 没有数据库的初始模式,因此无法从头开始重新创建数据库。

  2. 实施初始迁移,使您的数据库恢复到当前状态,然后继续正常跟踪未来的迁移。

    这需要一点技巧。在这里,您希望 Alembic 记录定义当前架构的初始迁移。由于 Alembic 通过将模型与数据库进行比较来创建迁移,因此诀窍是用空数据库替换真实数据库,然后生成迁移。记录初始迁移后,您恢复数据库,然后您可以继续正常迁移数据库。

我希望这有帮助。如果您还有其他问题,请告诉我。

于 2014-10-10T17:19:47.913 回答