Ich habe eine Flask-App, die Flask-SQLAlchemy verwendet, und ich versuche, es zu konfigurieren, mehrere Datenbanken mit dem Flask-Restless-Paket zu verwenden.Konfigurieren von Flask-SQLAlchemy zur Verwendung mehrerer Datenbanken mit Flask-Restless
Laut der Dokumentation() scheint die Konfiguration Ihrer Modelle zur Verwendung mehrerer Datenbanken mit __bind_key__
ziemlich einfach zu sein.
Allerdings scheint es nicht für mich zu arbeiten.
Ich schaffe meine app und initialisieren meine Datenbank wie folgt aus:
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)
Dann meine Modelle definieren einschließlich __bind_key__
, die SQLAlchemy sagen sollte, die es DB verwenden muss:
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)
...
Dann habe ich Feuer Flask-Restless wie folgt:
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)
Die App läuft gut und Wenn ich http://localhost:5000/api/postgres_model/[id]
drücke, erhalte ich die erwartete JSON-Antwort des Objekts von der Postgres-Datenbank (ich vermute, das liegt daran, dass ich seine Anmeldeinformationen in SQLALCHEMY_DATABASE_URI habe).
Obwohl, wenn ich http://localhost:5000/api/mysql_model/[id]
treffe, erhalte ich einen mysql_model_table
existiert nicht Fehler, anzeigend, dass es in der Postgres DB sucht, nicht die MySQL eine.
Was mache ich hier falsch?