Где разместить в сценарии флаг flask-migrate --multidb? - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно добавить несколько баз данных в программу, которую я написал, на основе устаревшей версии Мега-учебника Мигеля Гринберга 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

1 Ответ

0 голосов
/ 01 февраля 2019

Старая версия учебника не использовала Flask-Migrate, она использует доморощенное решение, основанное на другом инструменте миграции, чем Alembic.Вы действительно не можете вписать Flask-Migrate / Alembic в эти сценарии, они полностью несовместимы.

Вы можете посмотреть новую версию учебника, в частности главу 4, чтобы узнать, как работать с Flask-Migrate..

...