[PYTHON] Prise en charge de plusieurs sessions avec SQL Alchemy

introduction

AWS Aurora a différents points de terminaison d'écriture et de lecture. Nous avons résumé comment prendre en charge SQL Alchemy en python dans de tels cas.

Donc, le principe est que le modèle est le même, seuls les points de terminaison sont différents pour l'écriture et la lecture.

environnement

python 3.8.1 SQLAlchemy 1.3.12

query_property ne peut pas être utilisé

Malheureusement, query_property, qui est une fonction pratique de SQLAlchemy, ne peut pas être utilisé car il s'attend à avoir une session dans l'application. En termes de code, il était très pratique d'écrire comme suit, mais deux sessions sont absolument nécessaires pour prendre en charge plusieurs bases de données.

User.query.all()

Alors que faire

Vous pouvez créer deux sessions et les appeler normalement. Donc, c'est comme écrire un appel de requête en utilisant session.

session.query(User).all()

Sachez également que les données acquises dans une session entraîneront une erreur si vous insérez ou mettez à jour une autre session telle quelle. Plus précisément, le code suivant ne fonctionne pas. Je pense que cela fonctionnera si vous supprimez l'état quelque part dans les données acquises, mais il est plus sûr de le transférer docilement vers un autre objet.

read_session = read_session()
users = read_session.query(User).all()

write_session = write_session()
write_session.add_all()

Code source complet

Je vais le publier sur github, donc s'il vous plaît voir cela pour plus de détails.

https://github.com/tasogarei/sqlalchemy_multi_session_sample

en conclusion

query_property C'est pratique, mais j'ai abandonné parce que je ne pouvais pas le gérer. Si le modèle est divisé pour chaque base de données, je pense que si vous créez bien plusieurs declareative_base (), vous pouvez les associer les uns aux autres et cela fonctionnera. Cependant, cela n'a pas été vérifié. Quand j'aurai terminé ce que je veux faire maintenant, je le vérifierai.

Recommended Posts

Prise en charge de plusieurs sessions avec SQL Alchemy
Utiliser Enum avec SQLAlchemy
Obtenez la table dynamiquement avec sqlalchemy
Utiliser DATE_FORMAT avec le filtre SQLAlchemy
Introduction à RDB avec sqlalchemy Ⅰ
Comment mettre à jour avec SQLAlchemy?
Comment modifier avec SQLAlchemy?
Soutenez-vous avec l'API Twitter
Système de support de présentation avec Python3
Comment supprimer avec SQLAlchemy?
Comment gérer une session dans SQLAlchemy
Utilisation de la base de données SQL d'Azure avec SQL Alchemy
Connectez-vous à plusieurs bases de données avec SQL Alchemy
Génération de requêtes plus rapide avec SQLAlchemy ORM
Combiner l'héritage polymorphe et plusieurs-à-plusieurs avec SQLAlchemy
Introduction à RDB avec sqlalchemy II
Utilisation de sessions et de réflexions avec SQL Alchemy
Comment INNER JOIN avec SQL Alchemy