Was ist der Unterschied zwischen Filter und Filter_by in SQLAlchemy?
Kann jemand erklären den Unterschied zwischen filter
und filter_by
Funktionen in SQLAlchemy? Ich bin verwirrt und kann nicht wirklich den Unterschied sehen. Welche soll ich verwenden?
InformationsquelleAutor der Frage bodacydo | 2010-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
filter_by
ist für einfache Abfragen auf die Spalte-Namen mit regelmäßigen kwargs, wiedb.users.filter_by(name='Joe')
Das gleiche kann erreicht werden mit
filter
ist, nicht mit kwargs, sondern mit dem '==' Gleichheits-operator, der hat schon überlastet bei der db.Benutzer.name-Objekt:db.users.filter(db.users.name=='Joe')
Kann man auch schreiben leistungsfähigere Abfragen mit
filter
wie Ausdrücke wie:db.users.filter(or_(db.users.name=='Ryan', db.users.country=='England'))
InformationsquelleAutor der Antwort Daniel Velkov
Hatten wir tatsächlich diese zusammengeführt, die ursprünglich, D. H. es war ein "filter"-Methode, die angenommen *args und **kwargs, wo Sie passieren konnte, ein SQL-Ausdruck oder Schlüsselwort-Argumente (oder beides). Ich finde eigentlich, dass viel bequemer, aber die Menschen haben immer verwirrt, da Sie in der Regel noch immer über den Unterschied zwischen
column == expression
undkeyword = expression
. Also teilen wir Sie auf.InformationsquelleAutor der Antwort zzzeek
filter_by
nutzt keyword-Argumenten, in der Erwägung, dassfilter
ermöglicht pythonic Filterung Argumente wiefilter(User.name=="john")
InformationsquelleAutor der Antwort Johannes Charra
Ist es ein syntax-Zucker für eine schnellere Abfrage zu schreiben. Seine Implementierung in pseudocode:
Für UND du kannst einfach schreiben:
btw
kann geschrieben werden als
Außerdem können Sie die Objekt direkt von PK über
get
Methode:Bei der Verwendung
get
Fall ist es wichtig, dass das Objekt zurückgegeben werden kann, ohne Datenbank-Anfrageidentity map
werden können, die als cache verwendet wird(im Zusammenhang mit der Transaktion)InformationsquelleAutor der Antwort enomad
den Unterschied zwischen
filter()
undfilter_by()
ist, dass der ehemalige(filter()
) funktioniert wie einor (||)
Anweisung undfilter_by()
funktioniert wie einand (&&)
- Anweisung.filter()
wertet true, wenn der übergebene argument istTrue
. Er vergleicht es mit dem gleich-Zeichen==
. Währendfilter_by()
wertetTrue
wenn, und nur wenn alle angegebenen Argumente ausgewertetTrue
.So sollte darauf geachtet werden, beim Aufruf jeder Funktion, da Sie nicht zu bewerten, Ihre Argumente in der gleichen Weise.
Kasse dieses Beispiel unten:
zurückkehren würde
True
wenn, und nur wenn alle Argumente geliefert zurückTrue
während:
zurückkehren würde
True
wenn eines der angegebenen Argumente wertetTrue
InformationsquelleAutor der Antwort codemonk