AWS Aurora verfügt über verschiedene Schreib- und Leseendpunkte. Wir haben zusammengefasst, wie SQL Alchemy in Python in solchen Fällen unterstützt werden kann.
Die Voraussetzung ist also, dass das Modell dasselbe ist, nur die Endpunkte zum Schreiben und Lesen unterschiedlich sind.
python 3.8.1 SQLAlchemy 1.3.12
Leider kann query_property, eine praktische Funktion von SQLAlchemy, nicht verwendet werden, da eine Sitzung in der Anwendung erwartet wird. In Bezug auf Code war es sehr praktisch, wie folgt zu schreiben, aber zwei Sitzungen sind unbedingt erforderlich, um mehrere Datenbanken zu unterstützen.
User.query.all()
Sie können zwei Sitzungen erstellen und diese normal aufrufen. Es ist also so, als würde man einen Abfrageanruf mithilfe einer Sitzung schreiben.
session.query(User).all()
Beachten Sie außerdem, dass die in einer Sitzung erfassten Daten zu einem Fehler führen, wenn Sie eine andere Sitzung so wie sie ist einfügen oder aktualisieren. Insbesondere funktioniert der folgende Code nicht. Ich denke, dass es funktionieren wird, wenn Sie den Status irgendwo in den erfassten Daten löschen, aber es ist sicherer, ihn gehorsam auf ein anderes Objekt zu übertragen.
read_session = read_session()
users = read_session.query(User).all()
write_session = write_session()
write_session.add_all()
Ich werde es auf Github veröffentlichen, bitte sehen Sie das für Details.
https://github.com/tasogarei/sqlalchemy_multi_session_sample
query_property Es ist praktisch, aber ich habe aufgegeben, weil ich damit nicht umgehen konnte. Wenn das Modell für jede Datenbank aufgeteilt ist, können Sie meiner Meinung nach, wenn Sie mehrere deklareative_base () erstellen, diese miteinander verknüpfen, und es wird funktionieren. Es wurde jedoch nicht verifiziert. Wenn ich mit dem fertig bin, was ich jetzt tun möchte, werde ich es überprüfen.
Recommended Posts