He revisado los documentos y parece que no puedo encontrar cómo hacer una consulta OR en SQLAlchemy. Solo quiero hacer esta consulta.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Debería ser algo como
addr = session.query(AddressBook).filter(City == "boston").filter(????)
python
sqlalchemy
JiminyCricket
fuente
fuente
filter(or_(User.name == v for v in ('Alice', 'Bob', 'Carl')))
in_
operador de esta manera:filter(User.name.in_(['Alice', 'Bob', 'Carl']))
SQLAlchemy sobrecarga los operadores de bits
&
,|
y~
así que en vez de lo feo y de difícil lectura prefijo de sintaxis conor_()
yand_()
(como en la respuesta de Bastien ) se pueden utilizar estos operadores:Tenga en cuenta que los paréntesis no son opcionales debido a la precedencia de los operadores bit a bit.
Entonces toda su consulta podría verse así:
fuente
&
entre ellos y el primero (en lugar de usar una segundafilter
llamada) para el mismo efecto?or_()
La función puede ser útil en caso de un número desconocido de componentes de consulta OR.Por ejemplo, supongamos que estamos creando un servicio REST con pocos filtros opcionales, que debería devolver el registro si alguno de los filtros devuelve verdadero. Por otro lado, si el parámetro no se definió en una solicitud, nuestra consulta no debería cambiar. Sin
or_()
función debemos hacer algo como esto:Con la
or_()
función se puede reescribir a:fuente
Esto ha sido realmente útil. Aquí está mi implementación para cualquier tabla dada:
fuente