2017-05-18 6 views
2

Wie kann ich eine Filterbedingung für eine SQLAlchemy-Abfrage rückgängig machen? Z.B.SQL Alchemy ORM Filterbedingung überschreiben

q = Model.query.filter(Model.age > 25) 
q = q.remove_filter(Model.age) # what is this called? 
+0

Wenn in der Abfrage mehrere Filter nach Alter vorhanden sind, müssen Sie sie alle entfernen? –

+2

BTW warum würden Sie das brauchen? –

+0

Was ich immer mache, ist eine Liste von Filtern zu erstellen: 'filters = []' und dann fügen Sie die Filter einzeln nacheinander zur Liste hinzu: 'if x! = Y: filters .append (Model.x == y) 'und auf diese Weise können Sie sie bei Bedarf auch entfernen. Jetzt endlich, wenn Sie die Abfrage ausführen, tun Sie einfach 'q = q.filter (und _ (* Filter))' –

Antwort

-1

Ich glaube nicht, dass diese Funktion derzeit existiert. Sie können die Where-Klauseln (Filter) anzeigen (und löschen), indem Sie direkt auf die Liste der BinaryExpression-Objekte q.whereclause.clauses zugreifen.

Wenn das Ihre einzige Filter, so etwas wie dies funktionieren würde:

q.whereclause.clauses.pop()

Aber es wird ein wenig schwieriger (und hackier), wenn Sie einen bestimmten Filter aus vielen entfernen möchten.

2

Neben anderen Vorschläge, die einfache (aber wenn es wirklich einfach ist, hängt von Ihrer genauen Situation) Lösung kann sein, nur nicht die Filter anwenden, die Sie nicht benötigen.

Wahrscheinlich haben Sie einige komplexe Code, der die Filter bedingt zutrifft und dann haben Sie einen Fall, wenn Sie einige Filter rückgängig machen möchten. In diesem Fall könnten Sie nicht alle Filter auf die Abfrage anwenden, sondern die benötigten Filter in einer Sammlung sammeln, beispielsweise in einem Wörterbuch oder einer Liste.

Dann entfernen Sie Filter, die Sie nicht aus dem Wörterbuch brauchen, und dann tatsächlich anwenden Sie diese gesammelt Filter auf die Abfrage-Objekt.

Verwandte Themen