【问题标题】:Where to place the flask-migrate --multidb flag in a script?将 flask-migrate --multidb 标志放在脚本中的什么位置?
【发布时间】:2019-01-31 22:50:36
【问题描述】:

我需要将多个数据库添加到我基于旧版本 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

【问题讨论】:

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


    【解决方案1】:

    本教程的旧版本没有使用 Flask-Migrate,它使用了基于不同于 Alembic 的迁移工具的本土解决方案。您不能真正将 Flask-Migrate/Alembic 放入这些脚本中,它们完全不兼容。

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

    【讨论】:

    • 感谢您的回复-感谢您的教程,它们对我来说是一个巨大的资源!在我完全重写之前,有没有办法使用旧的本土解决方案来处理多数据库迁移?
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多