我有:多个相同的数据库和 SQL-Alchemy 设置。
我需要实现的是:一个能够查询所有数据库的“Flask”函数。所有其他功能只需要访问其中一个数据库。
数据库已经存在,我正在从它们加载数据。
最初我只使用 SQL-Alchemy 抽象层,没有任何 Flask 模型。这是代码的样子:
app = Flask(__name__)
app.config.from_object('myflaskapp.config.settings')
metadata = None
def connect_db():
engine = create_engine(app.config['DATABASE_URI'])
global metadata
metadata = MetaData(bind=engine)
return engine.connect()
@app.before_request
def before_request():
g.db = connect_db()
@app.after_request
def after_request(response):
close_connection()
return response
是在 settings.py 中声明的 DATABASE_URI。我想没关系,但是底层数据库是一个 Mysql 服务器和 DATABASE_URI 看起来像:
DATABASE_URI = 'mysql://' + dbuser + ':' + dbpass + '@' + dbhost + '/' +dbname
上面的代码允许我写这样的东西:
myTable = Table('branch', metadata, autoload=True)
myBranch = select([myTable])
这很方便。这种方法工作得很好,除非我必须处理多个数据库。更准确地说,我想(从同一函数中)显示属于具有完全相同结构的多个数据库的数据。这意味着相同的查询可以成功地再次运行任何数据库。在伪代码中:
@app.route('/summary')
def summary():
....
allData = []
for db in all_of_my_dbs:
allData.append(db.query())
....
sendToTemplate(allData)
这是可行的吗?可行吗?谢谢你。