我在Flask Application中使用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以添加到database1
现在取消注释代码,以便可以添加数据库2。通过flask db init
开关再次运行--multidb
时,将报告错误。
(venv) bash-4.1$ flask db init --multidb
Error: Directory migrations already exists and is not empty
如何通过迁移转换现有的flask项目以支持多个数据库?而且,这些多个数据库会随着时间的推移而发展,即,我可能不得不添加更多的数据库。那么,继续添加更多数据库的最佳方法是什么?
编辑
我发现一种解决方案是从现有数据库中删除alembic_version
表,删除migrations文件夹,然后执行db init --multidb
。我可以重置迁移,但想知道这是否是唯一的解决方案吗?