保留迁移中的数据

use*_*084 2 python postgresql flask flask-sqlalchemy alembic

使用此设置:

-Development environment
-Flask
-SQLAlchemy
-Postgres
-Possibility Alembic
Run Code Online (Sandbox Code Playgroud)

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

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

就像是:

db.create_all()
Run Code Online (Sandbox Code Playgroud)

第二个问题:

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

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

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

Mig*_*uel 12

我是Flask-Migrate的作者.

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

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

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

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

  2. 实施初始迁移,将数据库置于当前状态,然后继续正常跟踪未来的迁移.

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

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