2016-09-29 2 views
12

Ich habe eine Tabelle, die Millionen von Zeilen hat. Ich möchte mehrere Zeilen über eine in-Klausel löschen. Verwenden Sie jedoch den folgenden Code:SQLAlchemy: Wie löscht man mehrere Zeilen ohne Abfrage

session.query(Users).filter(Users.id.in_(subquery....)).delete() 

Der obige Code wird die Ergebnisse abfragen und dann das Löschen ausführen. Ich will das nicht machen. Ich will Geschwindigkeit.

Ich möchte ausführen können (ja, ich weiß über die session.execute): Delete from users where id in()

So ist die Frage: Wie kann ich das Beste aus zwei Welten, die ORM? Kann ich das Löschen durchführen, ohne die Abfrage hart zu codieren?

Antwort

16

Ja! Sie können delete() für das Tabellenobjekt mit einem zugeordneten whereclause aufrufen.

Etwas wie folgt aus:

stmt = Users.__table__.delete().where(Users.id.in_(subquery...))

(und dann vergessen Sie nicht, um die Anweisung auszuführen: engine.execute(stmt))

source

+0

Sie direkt an waren! Genial. Vielen Dank! –

Verwandte Themen