Мне нужно добавить несколько баз данных в программу, которую я написал, на основе устаревшей версии Мега-учебника Мигеля Гринберга Flask .У меня есть пара баз данных, настроенных на SQLALCHEMY_BINDS
, и они работают хорошо, но проблема возникает, когда я переношу их на новую версию.Вместо того, чтобы получать три обновленные версии моих трех баз данных, три разбиваются на три таблицы в моей первой базе данных.Из некоторых исследований я понимаю, что это потому, что Alembic запутывается и объединяет новые версии в первую базу данных, оставляя две оставшиеся без изменений.Я знаю, что мне нужно добавить флаг --multidb
, чтобы решить эту проблему.Обычно это было бы частью инициализации:
$ flask db init --multidb
Но мне интересно, куда я помещаю это в сценарии, которые я основал на его уроке (config.py
, db_create.py
, db_migrate.py
, downgrade.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