将flask-migrate --multidb标志放在脚本的什么位置?

时间:2019-01-31 22:50:37

标签: python database flask flask-sqlalchemy flask-migrate

我需要将多个数据库添加到基于旧版Miguel Grinberg's Flask Mega-Tutorial编写的程序中。我有几个配置有SQLALCHEMY_BINDS的数据库,它们运行良好,但是当我将它们迁移到新版本时出现了问题。而不是获得我的三个数据库的三个更新版本,这三个被折叠到我的第一个数据库的三个表中。从一些研究中我了解到,这是因为Alembic感到困惑,并将新版本合并到第一个数据库中,而其余两个则保持不变。我知道我需要添加--multidb flag来解决此问题。通常是初始化的一部分:

$ flask db init --multidb

但是我想知道如何将其放置在基于他的教程(config.pydb_create.pydb_migrate.pydowngrade.py)中的脚本中。我的猜测可能在db_migrate.py脚本中?还是__init__.py文件?你能给我一个正确的方向吗?谢谢!

migrate.py

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))

__init__.py

from flask import Flask
from flask.ext.socketio import SocketIO, emit
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')
app.config['SECRET_KEY'] = 'shhhhhh!'
socketio = SocketIO(app)
db = SQLAlchemy(app)

from app import views, models

1 个答案:

答案 0 :(得分:0)

该教程的旧版本未使用Flask-Migrate,而是使用了基于不同于Alembic迁移工具的本地解决方案。您无法真正将Flask-Migrate / Alembic放入这些脚本中,因为它们完全不兼容。

您可以查看教程的新版本,特别是第4章,以了解如何使用Flask-Migrate。