PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Avec sqlalchemy, comment se lier dynamiquement au moteur de base de données sur une base par demande

Lier des objets globaux (mappeurs, métadonnées) à une connexion spécifique à l'utilisateur n'est pas une bonne solution. En plus d'utiliser une session étendue. Je suggère de créer une nouvelle session pour chaque demande et de la configurer pour utiliser des connexions spécifiques à l'utilisateur. L'exemple suivant suppose que vous utilisez des objets de métadonnées distincts pour chaque base de données :

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)()