#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
. Я согласен с сбросом миграции, но хочу знать, является ли это единственным решением?