首页 > 解决方案 > Flask DB 迁移以使用绑定支持多个数据库

问题描述

我正在使用带有烧瓶迁移的烧瓶应用程序。我已经用单个数据库初始化了应用程序,但现在需要添加多个数据库。

以下是我使用以下代码执行的步骤:-

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添加到database1

现在取消注释代码,以便可以添加 database2。flask db init再次用switch运行--multidb,报错。

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

如何使用迁移转换现有的烧瓶项目以支持多个数据库?此外,这些多个数据库将随着时间的推移而发展,即我可能必须添加更多数据库。那么,继续添加更多数据库的最佳方法是什么?

编辑

我发现一种解决方案是alembic_version从现有数据库中删除表,删除迁移文件夹,然后执行db init --multidb. 我可以重置迁移但想知道这是否是唯一的解决方案?

标签: pythonflaskflask-sqlalchemyflask-migrate

解决方案


推荐阅读