2013-02-22 12 views
9

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?

Antwort

11

Dies wurde wegen eines einfachen Tippfehler nicht funktioniert:

__bind_key = 'db1' 

sein sollte
__bind_key__ = 'db1' 

Ich habe die ursprüngliche Frage aktualisiert und fixiert den Tippfehler als ein Beispiel dafür, wie das funktionieren kann für andere.

Verwandte Themen