python - 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
. 我可以重置迁移但想知道这是否是唯一的解决方案?
解决方案
推荐阅读
- excel - 在 NumberFormat vba 之后更新单元格
- javascript - 带有 charCodeAt() 的 js 中的 ASCII 字符
- malloc - Cython:在类中使用 PyMem_Malloc 时出现段错误
- python - Python不会读取文本文件
- java - 可以设计什么样的标准来优先考虑cloudsim中的cloudlet?
- python - Python不会导入模块
- angular - 如何在 [ngClass] 和 ngIf 中使用动态局部模板变量
- java - 何时使用 jmap -J
选项? - javascript - 如何在 Switchery 插件中将 box-shadow 添加到 jackColor
- python - 哪些文件的名称来自 result dir(scrapy) 命令?