273 votes

Utiliser OR dans SQLAlchemy

J'ai parcouru la documentation et je n'arrive pas à trouver comment faire une requête OR dans SQLAlchemy. Je veux juste faire cette requête.

 SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
 

Devrait être quelque chose comme

 addr = session.query(AddressBook).filter(City == "boston").filter(????)
 

454voto

Bastien Léonard Points 18404

Du tutoriel :

 from sqlalchemy import or_
filter(or_(User.name == 'ed', User.name == 'wendy'))
 

416voto

ThiefMaster Points 135805

SQLAlchemy surcharge des opérateurs au niveau du bit &, | et ~ donc au lieu de le laid et difficile à lire préfixe syntaxe, or_() et and_() (comme en Bastien réponse) vous pouvez utiliser ces opérateurs:

.filter((AddressBook.lastname == 'bulger') | (AddressBook.firstname == 'whitey'))

Notez que les parenthèses ne sont pas une option en raison de la priorité des opérateurs au niveau du bit.

Donc, l'ensemble de votre requête pourrait ressembler à ceci:

addr = session.query(AddressBook) \
    .filter(AddressBook.city == "boston") \
    .filter((AddressBook.lastname == 'bulger') | (AddressBook.firstname == 'whitey'))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X