python – 将数据库迁移从sqlalchemy-migrate更改为Flask-Migrat
我有一个基于
miguel flask tutorial 的网络应用程序
所以我使用sqlalchemy-migrate作为数据库,现在我应该在迁移中使用Alembic如何进行配置?有什么办法我可以从sqlalchemy-migrate更改为Flask-Migrate吗?(因为我的应用程序已经完成并且再次执行它是如此多的工作)Thanx
#!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存储库 3.将整个迁移历史记录传输到Flask-Migrate 这是最复杂的解决方案,因为它要求sqlalchemy-migrate中的每次迁移都要单独转移到Alembic. 过程如下: >创建Flask-Migrate存储库 如果您需要推荐,我认为在大多数情况下#2是最佳选择.如果我预计我需要将我的数据库降级到历史上的特定迁移,我只会经历#3的痛苦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |