22

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を検索していることを示しています。

私はここで何が間違っているのですか?

4

1 に答える 1

23

単純なタイプミスのため、これは機能しませんでした。

__bind_key = 'db1'

になるはずだった

__bind_key__ = 'db1'

元の質問を更新し、これが他の人にとってどのように機能するかの例としてタイプミスを修正しました。

于 2013-02-22T15:32:49.187 に答える