Ich habe die Dokumente durchgesehen und kann anscheinend nicht herausfinden, wie eine ODER-Abfrage in SQLAlchemy durchgeführt wird. Ich möchte nur diese Abfrage machen.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Sollte so etwas sein
addr = session.query(AddressBook).filter(City == "boston").filter(????)
python
sqlalchemy
JiminyCricket
quelle
quelle
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))
in_
Operator wiefilter(User.name.in_(['Alice', 'Bob', 'Carl']))
SQLAlchemy Überlastungen die Bit - Operatoren
&
,|
und~
so statt der hässliche und schwer zu lesende Präfix Syntax mitor_()
undand_()
(wie in Bastiens Antwort ) Sie diese Operatoren verwenden können:Beachten Sie, dass die Klammern aufgrund der Priorität der bitweisen Operatoren nicht optional sind .
Ihre gesamte Anfrage könnte also so aussehen:
quelle
&
zwischen ihnen und dem ersten verwenden (anstatt einen zweitenfilter
Aufruf zu verwenden), um denselben Effekt zu erzielen?or_()
Die Funktion kann bei unbekannter Anzahl von ODER-Abfragekomponenten nützlich sein.Angenommen, wir erstellen einen REST-Service mit wenigen optionalen Filtern, der den Datensatz zurückgeben soll, wenn einer der Filter true zurückgibt. Wenn andererseits in einer Anforderung kein Parameter definiert wurde, sollte sich unsere Abfrage nicht ändern. Ohne
or_()
Funktion müssen wir so etwas tun:Mit
or_()
Funktion kann es umgeschrieben werden in:quelle
Das war wirklich hilfreich. Hier ist meine Implementierung für eine bestimmte Tabelle:
quelle