将数据库迁移从sqlalchemy-migrate更改为Flask-Migrate

琳达

我有一个基于miguel flask教程的Web应用程序

因此,我将sqlalchemy-migrate用于数据库,现在我应该在迁移中使用Alembic。如何进行配置?有什么方法可以将sqlalchemy-migrate更改为Flask-Migrate?(因为我的应用程序已完成,再次执行该操作又需要大量工作)

db_migrate.py:

#!flask/bin/python
import imp
from migrate.versioning import api
from app import db
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
migration = SQLALCHEMY_MIGRATE_REPO + '/versions/%03d_migration.py' % (api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) + 1)
tmp_module = imp.new_module('old_model')
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
exec old_model in tmp_module.__dict__
script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
open(migration, "wt").write(script)
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
print 'New migration saved as ' + migration
print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO))
米格尔

有三种方法可以解决此问题,其中两种相对容易,但最后一种非常费力:

1.仅使用Flask-Migrate跟踪未来的迁移

这是最简单,但不太有趣。就像安装新项目一样,只需安装和设置Flask-Migrate,下次需要迁移时,请使用它代替sqlalchemy-migrate。

缺点是Alembic不会记录迁移的当前状态,只有您将来应用的迁移才记录。

2.作为一次初始迁移,跟踪数据库的当前状态

这是对先前方法的改进,使Flask-Migrate的存储库完整,但是sqlalchemy-migrate中的所有迁移都折叠为Alembic的单个迁移。

流程如下:

  • 创建Flask-Migrate存储库
  • 如果需要,请备份数据库中的数据(下一步将丢失它!)
  • 使用db_downgrade.py教程中脚本,将数据库设置为版本0(空数据库)。
  • 使用Flask-Migrate生成迁移。直到当前版本为止,此迁移将包括所有数据库更改。
  • 将数据还原到您的数据库。
  • 通常使用Flask-Migrate应用将来的迁移。您可以删除sqlalchemy-migrate存储库,因为所有数据库更改现在都在Alembic中。

3.将整个迁移历史记录转移到Flask-Migrate

这是解决方案中最复杂的,因为它要求将您在sqlalchemy-migrate中进行的每个迁移都单独转移到Alembic。

流程如下:

  • 创建Flask-Migrate存储库
  • 如果需要,请备份数据库中的数据(下一步将丢失它!)
  • 使用db_downgrade.py教程中脚本,将数据库设置为版本0(空数据库)。或者,如果更简单,只需手动删除数据库中的所有表。
  • 假设您的应用程序处于源代码控制中,请签出与您的第一次数据库迁移匹配的代码版本。
  • 使用Flask-Migrate生成迁移。此迁移将与您的第一个sqlalchemy-migrate迁移相同。
  • 签出与第二次sqlalchemy-migrate迁移匹配的代码版本。
  • 使用Flask-Migrate生成第二个迁移。此迁移将与您的第二次sqlalchemy-migrate迁移相同。
  • 像这样继续,直到达到当前代码版本和上一次数据库迁移为止。
  • 将数据还原到您的数据库。
  • 通常使用Flask-Migrate应用将来的迁移。您可以删除sqlalchemy-migrate存储库,因为所有数据库更改现在都在Alembic中。

如果您需要建议,我认为在大多数情况下#2是最佳选择。如果我希望将数据库降级到历史记录中的特定迁移,则只会经历#3的痛苦。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数据库从sqlite更改为mysql时Python manage.py migrate错误

来自分类Dev

Django Migrate-将charfield更改为datetimefield

来自分类Dev

Flask-Migrate迁移能否在不同的数据库引擎上工作?

来自分类Dev

如何使用 Flask-Migrate 进行数据库迁移?

来自分类Dev

Flask-migrate不在Heroku中创建数据库

来自分类Dev

flask-migrate:如何添加新数据库

来自分类Dev

重新运行Heroku上的所有数据库迁移(rake db:migrate:reset)

来自分类Dev

Flask Migrate和PostgreSQL数据更新

来自分类Dev

Python flask-migrate数据迁移未保存

来自分类Dev

使用rake db:migrate迁移数据不会更改它

来自分类Dev

如何在全新的应用程序部署中将数据库与Flask-Migrate同步?

来自分类Dev

Flask-migrate:如何管理其他已安装模块的数据库

来自分类Dev

PersistenceJS:使用migrate()更新现有数据库

来自分类Dev

使用Laravel Migrate如何刷新单个数据库?

来自分类Dev

Django migrate 尝试连接到非默认数据库

来自分类Dev

Doctrine migrate 丢失了我的数据

来自分类Dev

Flask-migrate未检测到架构更改

来自分类Dev

heroku运行rake db:migrate还原迁移

来自分类Dev

rake db:migrate发生迁移错误

来自分类Dev

Django的Core Migrate工具与South进行Django数据迁移的对比

来自分类Dev

Database.Migrate()方法如何工作?可以降级数据库吗?

来自分类Dev

Rails数据库抱怨仅在生产中不存在(使用db:migrate成功)

来自分类Dev

Rake db:migrate和db:create无法使用正确的数据库文件进行操作

来自分类Dev

无法运行 rake db:migrate 或任何其他与数据库相关的操作

来自分类Dev

运行 php artisan migrate 时出现未知数据库错误

来自分类Dev

如何解决这个laravel migrate错误创建数据库表?

来自分类Dev

访问在 Rails 中使用 migrate 创建的数据库表位置

来自分类Dev

db-migrate 从 csv 插入数据

来自分类Dev

为什么Flask-Migrate让我进行两步迁移?

Related 相关文章

  1. 1

    将数据库从sqlite更改为mysql时Python manage.py migrate错误

  2. 2

    Django Migrate-将charfield更改为datetimefield

  3. 3

    Flask-Migrate迁移能否在不同的数据库引擎上工作?

  4. 4

    如何使用 Flask-Migrate 进行数据库迁移?

  5. 5

    Flask-migrate不在Heroku中创建数据库

  6. 6

    flask-migrate:如何添加新数据库

  7. 7

    重新运行Heroku上的所有数据库迁移(rake db:migrate:reset)

  8. 8

    Flask Migrate和PostgreSQL数据更新

  9. 9

    Python flask-migrate数据迁移未保存

  10. 10

    使用rake db:migrate迁移数据不会更改它

  11. 11

    如何在全新的应用程序部署中将数据库与Flask-Migrate同步?

  12. 12

    Flask-migrate:如何管理其他已安装模块的数据库

  13. 13

    PersistenceJS:使用migrate()更新现有数据库

  14. 14

    使用Laravel Migrate如何刷新单个数据库?

  15. 15

    Django migrate 尝试连接到非默认数据库

  16. 16

    Doctrine migrate 丢失了我的数据

  17. 17

    Flask-migrate未检测到架构更改

  18. 18

    heroku运行rake db:migrate还原迁移

  19. 19

    rake db:migrate发生迁移错误

  20. 20

    Django的Core Migrate工具与South进行Django数据迁移的对比

  21. 21

    Database.Migrate()方法如何工作?可以降级数据库吗?

  22. 22

    Rails数据库抱怨仅在生产中不存在(使用db:migrate成功)

  23. 23

    Rake db:migrate和db:create无法使用正确的数据库文件进行操作

  24. 24

    无法运行 rake db:migrate 或任何其他与数据库相关的操作

  25. 25

    运行 php artisan migrate 时出现未知数据库错误

  26. 26

    如何解决这个laravel migrate错误创建数据库表?

  27. 27

    访问在 Rails 中使用 migrate 创建的数据库表位置

  28. 28

    db-migrate 从 csv 插入数据

  29. 29

    为什么Flask-Migrate让我进行两步迁移?

热门标签

归档