Automatisches propagieren des Löschens bei Verwendung eines bidirektionalen association_proxy

9

Ich verwende ein bidirektionales association_proxy , um die Eigenschaften Group.members und User.groups zu assoziieren. Ich habe Probleme mit dem Entfernen eines Mitglieds aus Group.members . Insbesondere löscht Group.members.remove erfolgreich einen Eintrag aus Group.members , , behält aber None anstelle des entsprechenden Eintrags in User.groups .

Genauer gesagt, der folgende (minimal-ish) repräsentative Code-Ausschnitt versagt seine letzte Behauptung:

%Vor%

Ich habe versucht, die Antworten zu SQLAlchemy Beziehung mit association_proxy zu folgen Probleme und Wie kann SQLAlchemy association_proxy verwendet werden Richtungsweisend? aber sie scheinen nicht zu helfen.

    
mickeyh 15.08.2016, 19:56
quelle

1 Antwort

2

Ich habe Ihr Problem fast ausschließlich zufällig entdeckt, als ich versuchte, herauszufinden, was vor sich geht.

>

Weil in der Datenbank keine Daten vorhanden waren, habe ich session.commit() hinzugefügt. Es stellt sich heraus (aus der verknüpften Antwort):

  

Die Änderungen werden nicht dauerhaft auf dem Datenträger gespeichert oder für andere Transaktionen sichtbar, bis die Datenbank ein COMMIT für die aktuelle Transaktion erhält (was session.commit () tut).

Da Sie nur die Änderungen in% ändern, fragt sqlalchemy die Datenbank nie erneut ab. Sie können dies überprüfen, indem Sie hinzufügen:

%Vor%

Und dann einfach den Code ausführen. Es werden alle Abfragen angezeigt, die ausgeführt werden, sobald sie auftreten. Dann können Sie .flush() in session.flush() ändern und dann erneut ausführen, und Sie werden sehen, dass mehrere session.commit() -Anweisungen nach Ihrem SELECT ausgeführt werden.

Es sieht so aus, als ob entweder commit oder session.expire(user) eine Aktualisierung des Benutzers erzwingen. Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, das Update auf das andere Objekt zu übertragen, ohne explizit darauf einzugehen (oder wenn das sogar wünschenswert ist).

    
Wayne Werner 15.08.2016, 20:43
quelle

Tags und Links