Flask-SQLAlchemyを使用するFlaskアプリがあり、Flask-Restlessパッケージで複数のデータベースを使用するように構成しようとしています。
ドキュメントによると、複数のデータベースを使用するようにモデルを構成するの__bind_key__
は非常に簡単なようです。
しかし、それは私にとってはうまくいかないようです。
アプリを作成し、次のようにデータベースを初期化します。
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
SQLALCHEMY_DATABASE_URI = 'postgres://db_user:db_pw@localhost:5432/db_name'
SQLALCHEMY_BINDS = {
'db1': SQLALCHEMY_DATABASE_URI,
'db2': 'mysql://db_user:db_pw@localhost: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)
...
次に、Flaskを起動します-このように落ち着きがありません:
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
存在しないというエラーが表示されます。これは、MySQLではなくPostgresDBを検索していることを示しています。
私はここで何が間違っているのですか?