Wie entfernen Sie alle Elemente aus der Viele-zu-Viele-Sammlung in SqlAlchemy?

8

Wenn ich ein Objekt aus der deklarativen ORM-N-zu-Viele-Beziehung entfernen muss, muss ich das tun:

%Vor%

Nun. Was soll ich tun, wenn ich all diese Beziehungen (nicht nur eine) aufräumen muss? Typische Situation: Ich möchte eine neue Liste von Tags für meinen Blogeintrag festlegen. Also muss ich ...:

  1. Entferne alle vorhandenen Beziehungen zwischen diesem Blogpost und Tags.
  2. Legen Sie neue Beziehungen fest und erstellen Sie neue Tags, falls sie nicht existieren.

Natürlich könnte es einen besseren Weg geben, dies zu tun. In diesem Fall lass es mich wissen.

    
Honza Javorek 25.10.2011, 11:56
quelle

2 Antworten

19

Dies ist das Standard-Python-Idiom zum Löschen einer Liste - Zuweisung an die "gesamte Liste":

%Vor%

Anstelle der leeren Liste können Sie den neuen Satz von Tags direkt zuweisen.

%Vor%

SQLAlchemys Beziehungen sind instrumentierte Attribute , was bedeutet, dass sie die Schnittstelle von eine Liste (oder set, dict, etc), aber alle Änderungen werden in der Datenbank widergespiegelt. Dies bedeutet, dass alles, was Sie mit einer Liste tun können, mit einer Relation möglich ist, während SQLA die Änderungen transparent überwacht und die Datenbank entsprechend aktualisiert.

    
Petr Viktorin 25.10.2011, 12:12
quelle
5

Confrimed für was Two-Bit Alchemist berichtet hat.

%Vor%

wird sich beschweren

%Vor%

Aber

%Vor%

scheint gut zu funktionieren.

    
Xuan Hu 28.04.2015 00:21
quelle

Tags und Links