Ho un'app Flask che usa Flask-SQLAlchemy e sto provando a configurarlo per utilizzare più database con il pacchetto Flask-Restless.Configurazione di Flask-SQLAlchemy per utilizzare più database con Flask-Restless
Secondo i documenti (http://pythonhosted.org/Flask-SQLAlchemy/binds.html), la configurazione dei modelli per utilizzare più database con __bind_key__
sembra piuttosto semplice.
Tuttavia non sembra funzionare per me.
creo la mia app e l'inizializzazione mio database come questo:
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)
Quindi definire i miei modelli tra cui __bind_key__
, che dovrebbe dire SQLAlchemy che DB ha bisogno di usare:
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)
...
Poi sparo up Flask-Restless in questo modo:
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)
L'app funziona bene e quando colpisco http://localhost:5000/api/postgres_model/[id]
ottengo la risposta JSON attesa dell'oggetto dal DB Postgres (suppongo che questo sia perché ho le credenziali in SQLALCHEMY_DATABASE_URI).
Sebbene quando ho colpito http://localhost:5000/api/mysql_model/[id]
, ottengo un errore mysql_model_table
inesistente, a indicare che sta cercando nel DB Postgres, non in quello MySQL.
Cosa sto facendo di sbagliato qui?