python - 在迁移中保留数据

标签 python postgresql flask flask-sqlalchemy alembic

使用此设置:

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

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

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

类似于:

db.create_all()

第二个问题:

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

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

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

最佳答案

我是 Flask-Migrate 作者。

你错了。 Flask-Migrate(通过 Alembic)将始终保留您数据库中的数据。这就是数据库迁移的全部意义所在,您不想丢失数据。

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

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

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

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

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

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

关于python - 在迁移中保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304356/

相关文章:

python - 将所有 python-rom 对象放入列表中

python - 通过 dns 连接时 Nginx 未正确返回 html 模板

python - 如何使用不均匀子数组作为平铺来平铺一维 numpy 数组?

python - 将 Lock 对象传递给继承 multiprocessing.Process 的类

java - 具有相似模式的 Spring 多数据源

python-3.x - 使用带有提供的文本字符串的 INSERT INTO 和来自另一个表的 select *

python - 如何在列表中以二进制前导 0b 为下标

python - 默认情况下使matplotlib图看起来像R?

Windows PostgreSQL 上的 RStudio 与 RPostgreSQL 的 SSL 连接

python - Flask-restplus:有什么方法可以大摇大摆地对命名空间进行排序?