PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Mit sqlalchemy, wie man sich dynamisch an die Datenbank-Engine pro Anfrage bindet

Das Binden globaler Objekte (Mapper, Metadaten) an benutzerspezifische Verbindungen ist kein guter Weg. Sowie mit Scoped Session. Ich schlage vor, für jede Anfrage eine neue Sitzung zu erstellen und sie so zu konfigurieren, dass sie benutzerspezifische Verbindungen verwendet. Das folgende Beispiel geht davon aus, dass Sie separate Metadatenobjekte für jede Datenbank verwenden:

binds = {}

finance_engine = create_engine(url1)
binds.update(dict.fromkeys(finance_metadata.sorted_tables, finance_engine))
# The following line is required when mappings to joint tables are used (e.g.
# in joint table inheritance) due to bug (or misfeature) in SQLAlchemy 0.5.4.
# This issue might be fixed in newer versions.
binds.update(dict.fromkeys([Employee, Customer, Invoice], finance_engine))

staff_engine = create_engine(url2)
binds.update(dict.fromkeys(staff_metadata.sorted_tables, staff_engine))
# See comment above.
binds.update(dict.fromkeys([Project, Hour], staff_engine))

session = sessionmaker(binds=binds)()