使用此设置:
-Development environment
-Flask
-SQLAlchemy
-Postgres
-Possibility Alembic
如果我有一个数据库,其中一些表填充了随机数据。据我所知,Flask-Migrate将使用Alembic,不会保留数据,只保持模型和数据库同步。
但使用Alembic或只删除>之间的差异是什么?创建所有表?
类似的东西:
db.create_all()
第二个问题:
当模型中的某些内容发生变化时,数据会发生什么变化?数据会丢失吗?或者Alembic可以保留以前填充的数据吗?
好吧,我的想法是用一些数据填充数据库,然后避免任何数据丢失 当模型改变时。 Alembic是解决方案吗?
或者我需要从.sql文件导入数据,例如,当我更改模型和数据库时?
答案 0 :(得分:11)
我是Flask-Migrate的作者。
你不正确。 Flask-Migrate(通过Alembic)将始终保留数据库中的数据。这就是使用数据库迁移的全部要点,您不希望丢失数据。
您似乎已经拥有一个包含数据的数据库,并且您希望开始使用迁移。您有两种方法可以将Flask-Migrate合并到您的项目中:
仅跟踪正在进行的迁移,即将初始数据库架构保留在迁移跟踪之外。
为此你真的没什么特别的事。只需执行manage.py db init
即可创建迁移存储库,当您需要迁移数据库时,只需使用manage.py db migrate
即可。这种方法的缺点是Flask-Migrate / Alembic没有数据库的初始模式,因此无法从头开始重新创建数据库。
实施初始迁移,使您的数据库进入当前状态,然后继续正常跟踪未来的迁移。
这需要一点技巧。在这里,您希望Alembic记录定义当前架构的初始迁移。由于Alembic通过将模型与数据库进行比较来创建迁移,因此诀窍是用空数据库替换真实数据库,然后生成迁移。记录初始迁移后,您将恢复数据库,从那时起,您可以继续正常迁移数据库。
我希望这会有所帮助。如果您还有其他问题,请与我们联系。