Миграция базы данных Flask для поддержки нескольких баз данных с использованием привязок

#python #flask #flask-sqlalchemy #flask-migrate

#python #flask #flask-sqlalchemy #flask-миграция

Вопрос:

Я использую приложение Flask с flask-migrate. Я инициализировал приложение с одной базой данных, но теперь требуется добавить несколько баз данных.

Вот шаги, которые я выполнил с помощью приведенного ниже кода :-

 from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
import os
from flask_migrate import Migrate

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'   os.path.join(basedir, 'database1.db')

"""
app.config['SQLALCHEMY_BINDS'] = {
        'database2' : 'sqlite:///'   os.path.join(basedir, 'database2.db')
    }
"""

db = SQLAlchemy(app)
migrate = Migrate(app, db)

class Table1(db.Model):
    id = db.Column(db.Integer, primary_key=True)

"""
class Table2(db.Model):
    __bind_key__ = 'database2'
    id = db.Column(db.Integer, primary_key=True)
"""

@app.route('/add1')
def index():
    item = Table1(id=2)
    db.session.add(item)
    db.session.commit()
    return 'Added value'

"""
@app.route('/add2')
def index2():
    item = Table2(id=2)
    db.session.add(item)
    db.session.commit()
    return 'Added table2 value'
"""
    
if __name__ == '__main__':
    app.run(debug=True)
  

Инициализировал код, как показано ниже

 flask db init
flask db migrate
flask db upgrade
  

Посетите http://127.0.0.1:5000/add1 для добавления в базу данных 1

Теперь раскомментируйте код, чтобы можно было добавить database2. При flask db init повторном запуске с --multidb помощью switch сообщается об ошибке.

 (venv) bash-4.1$ flask db init --multidb
Error: Directory migrations already exists and is not empty
  

Как я могу преобразовать существующий проект flask с помощью миграции для поддержки нескольких баз данных? Кроме того, эти несколько баз данных будут развиваться с течением времени, т.Е. Мне, возможно, придется добавить больше баз данных. Итак, каков наилучший способ продолжать добавлять новые базы данных?

Редактировать

Я нахожу одно из решений — удалить alembic_version таблицу из существующей базы данных, удалить папку migrations, а затем выполнить db init --multidb . Я согласен с сбросом миграции, но хочу знать, является ли это единственным решением?