我有一个使用Flask-SQLAlchemy的Flask应用程序,我试图配置它使用Flask-Restless包中的多个数据库。配置Flask-SQLAlchemy与Flask-Restless一起使用多个数据库
根据文档(http://pythonhosted.org/Flask-SQLAlchemy/binds.html),将模型配置为使用__bind_key__
的多个数据库似乎非常简单。
但它似乎并没有为我工作。
创建我的应用程序,并初始化我的数据库是这样的:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
SQLALCHEMY_DATABASE_URI = 'postgres://db_user:[email protected]:5432/db_name'
SQLALCHEMY_BINDS = {
'db1': SQLALCHEMY_DATABASE_URI,
'db2': 'mysql://db_user:[email protected]:3306/db_name'
}
app = Flask(__name__)
db = SQLALchemy(app)
然后确定我的模型,包括__bind_key__
,这应该告诉SQLAlchemy的其中DB它需要使用:
class PostgresModel(db.Model):
__tablename__ = 'postgres_model_table'
__bind_key__ = 'db1'
id = db.Column(db.Integer, primary_key=True)
...
class MySQLModel(db.Model):
__tablename__ = 'mysql_model_table'
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
...
然后我火像这样烧瓶不安:
manager = restless.APIManager(app, flask_sqlalchemy_db=db)
manager.init_app(app, db)
auth_func = lambda: is_authenticated(app)
manager.create_api(PostgresModel,
methods=['GET'],
collection_name='postgres_model',
authentication_required_for=['GET'],
authentication_function=auth_func)
manager.create_api(MySQLModel,
methods=['GET'],
collection_name='mysql_model',
authentication_required_for=['GET'],
authentication_function=auth_func)
该应用运行良好,当我点击http://localhost:5000/api/postgres_model/[id]
时,我得到Postgres DB对象的预期JSON响应(我猜这是因为我在SQLALCHEMY_DATABASE_URI中拥有它的凭据)。
虽然当我点击http://localhost:5000/api/mysql_model/[id]
,我得到一个mysql_model_table
不存在的错误,表明它正在寻找Postgres DB,而不是MySQL。
我在这里做错了什么?