保留迁移中的数据

时间:2014-10-10 16:54:22

标签: python postgresql flask flask-sqlalchemy alembic

使用此设置:

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

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

但使用Alembic或只删除>之间的差异是什么?创建所有表?

类似的东西:

db.create_all()

第二个问题:

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

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

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

1 个答案:

答案 0 :(得分:11)

我是Flask-Migrate的作者。

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

您似乎已经拥有一个包含数据的数据库,并且您希望开始使用迁移。您有两种方法可以将Flask-Migrate合并到您的项目中:

  1. 仅跟踪正在进行的迁移,即将初始数据库架构保留在迁移跟踪之外。

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

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

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

  3. 我希望这会有所帮助。如果您还有其他问题,请与我们联系。