我有一个基于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))
有三种方法可以解决此问题,其中两种相对容易,但最后一种非常费力:
这是最简单,但不太有趣。就像安装新项目一样,只需安装和设置Flask-Migrate,下次需要迁移时,请使用它代替sqlalchemy-migrate。
缺点是Alembic不会记录迁移的当前状态,只有您将来应用的迁移才记录。
这是对先前方法的改进,使Flask-Migrate的存储库完整,但是sqlalchemy-migrate中的所有迁移都折叠为Alembic的单个迁移。
流程如下:
db_downgrade.py
教程中的脚本,将数据库设置为版本0(空数据库)。这是解决方案中最复杂的,因为它要求将您在sqlalchemy-migrate中进行的每个迁移都单独转移到Alembic。
流程如下:
db_downgrade.py
教程中的脚本,将数据库设置为版本0(空数据库)。或者,如果更简单,只需手动删除数据库中的所有表。如果您需要建议,我认为在大多数情况下#2是最佳选择。如果我希望将数据库降级到历史记录中的特定迁移,则只会经历#3的痛苦。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句