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.
python 3.8.1 SQLAlchemy 1.3.12
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()
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()
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
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