2017-05-16 4 views
2

Ich bin auf der Suche nach einer Möglichkeit, verbindliche Modelle zu unterschiedlichen Datenbanken zu modellieren (Schema in allen Datenbanken identisch ist), zum Beispiel - getrennt nach Ländernsqlalchemy dynamische Bindung

class User(): 
    __tablename__ = 'user' 

    id = Column(Integer, primary_key=True) 
    name = Column(VARCHAR(255)) 
    age = Column(Integer) 

Dieses Modell zwischen mehreren Datenbanken gemeinsam genutzt wird:

postgresql: // postgres: @ localhost/US

postgresql: // postgres: @ localhost/RU

Multiple bindet ist möglich unter Verwendung von Kolben: Flask-SQLAlchemy multiple databases and binds aber Bindeschlüssel ist im Modell fest http://flask-sqlalchemy.pocoo.org/2.1/binds/

Gibt es eine Möglichkeit, es dynamisch an das Modell zu binden?

Antwort

0

Weitere Informationen dazu, wie sqlalchemy Tabellen bindet, finden Sie in der Dokumentation get_bind von sqlalchemy.

Wenn ich flask ignoriere, würde ich empfehlen, das bind-Argument für Ihre Sitzungsobjekte basierend auf dem Land festzulegen, auf das Sie zugreifen möchten. So sagen Sie zum Beispiel Sess ist Ihr Session-Objekt. Sie könnten ausführen

sess.bind = choose_bind_from_request_data(r) 

Sie wollen würde, um die Sitzung sicherstellen, dass keine aktive Transaktion hatte, wenn Sie die Bind zu ändern, obwohl es ein besseres Design wäre eine neue Sitzung zu erstellen und die bind setzen, anstatt die Änderung der bind auf einer bestehenden Sitzung.

Es sieht nicht so aus, als wäre es einfach, eine Bindung pro Tabelle dynamisch zu wählen, obwohl, wie bereits erwähnt, dynamische Bindungen pro Sitzung einfach sind.

+0

mehrere bindet Objekt mit sqlalchemy Mapper abgebildet werden - http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy .orm.session.Session.params.binds. Dieses Objekt hat drei verschiedene Mapping-Typen: http://docs.sqlalchemy.org/en/latest/orm/mapping_styles.html. ist es möglich, eine Anfrage arg mit bind mit Mapper zu binden? – gCoh

Verwandte Themen