Ich versuche, einige Datensätze aus meinem db zu löschen. Ich habe eine Kaskade erstellt, um auch alles zu löschen, was mit dem Datenaufzeichnen zusammenhängt. Mein Problem ist jetzt, dass, wenn ich mehr als eine Datenaufzeichnung mit dem gleichen Namensattribut habe und ich alle sie löschen möchte. So zum Beispiel habe ich 3 Datensätze und zwei haben ein Attribut name = Max
und das letzte hat das Attribut name = Peter
. Wie kann ich jetzt beide Max löschen? Dies ist der Code, den ich bisher bekommen habe:SQLAlchemy löschen Sie alle Elemente und nicht nur die erste
def delete_anw(engine):
Session = sessionmaker(bind=engine)
session = Session()
f = session.query(Anwendung).filter_by(name="Max").first()
session.delete(f)
session.commit()
Dieser Code löscht nur die erste Abfrage, die es findet. Ich weiß, es ist wegen der first()
, aber gibt es eine Methode wie all()
, um alle Datensätze zu löschen, die den Namen Max haben?
Siehe: https://Stackoverflow.com/a/7954618/4367 (schlägt vor, dass Sie syncuse_session verwenden) – Rick
Nach dem Versuch mit synchronize_session immer noch diesen Schlüssel (ID) = (9) wird immer noch aus der Tabelle verwiesen. – Blinxen
Haben Sie versucht, "Wenn zwei Abfragen nicht ausgeführt werden sollen, übergeben Sie stattdessen synchronize_session = False und rufen Sie dann session.expire_all() sofort nach dem Löschen auf, um einen inkonsistenten Status im MetaData-Speicher zu vermeiden." Teil? Wenn Sie FK-Beschränkungen haben, stellen Sie sicher, dass sie das gewünschte Verhalten kaskadieren. – Rick