Eu olhei através dos docs e eu não consigo descobrir como fazer um OR consulta no SQLAlchemy. Eu só quero fazer essa consulta.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Deve ser algo como
addr = session.query(AddressBook).filter(City == "boston").filter(????)
python
sqlalchemy
Grilo Falante
fonte
fonte
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))
in_
operador assim:filter(User.name.in_(['Alice', 'Bob', 'Carl']))
SQLAlchemy sobrecarrega os operadores bit a bit
&
,|
e~
assim, em vez do feio e difícil de ler prefixo sintaxe comor_()
eand_()
(como na resposta de Bastien ) você pode usar esses operadores:Observe que os parênteses não são opcionais devido à precedência dos operadores bit a bit.
Portanto, toda a sua consulta pode ficar assim:
fonte
&
entre eles e o primeiro (em vez de usar uma segundafilter
chamada) para o mesmo efeito?or_()
A função pode ser útil em caso de número desconhecido de componentes de consulta OR.Por exemplo, suponha que estamos criando um serviço REST com poucos filtros opcionais, que devem retornar registro se algum dos filtros retornar verdadeiro. Por outro lado, se o parâmetro não foi definido em uma solicitação, nossa consulta não deve mudar. Sem
or_()
função, devemos fazer algo assim:Com a
or_()
função, pode ser reescrita para:fonte
Isso tem sido realmente útil. Aqui está minha implementação para qualquer tabela:
fonte