[pyar] sqlalchemy agrupar clausulas de where

Javier Marcon javiermarcon en gmail.com
Jue Ene 21 20:02:07 ART 2016


Hola, No estoy encontrando la forma de poder agrupar los .filter con
sqlalchemy. Por ejemplo quiero hacer una consulta con sqlalchemy que
ejecute algo asi:

"""select distinct nombre, apellido, edad, estado_civil
from usuarios
where (nombre = 'jose' or apellido = 'mendez') and ((edad = 18 and sexo
= 'M') or (edad = 15 and sexo = 'F'))
and ((extract(day FROM cumleanios) = extract(day FROM
'yesterday'::timestamp)) AND
(extract(month FROM cumleanios) = extract(month FROM
'yesterday'::timestamp)) AND
(extract(year FROM cumleanios) = extract(year FROM
'yesterday'::timestamp))"""

El tema es que al hacerlo con sqlalchemy de esta forma no me crea los
agrupamientos (con parentesis) del where:

dbs.query(Usuarios).distinct().filter(and_(or_(Usuarios.nombre=='jose',
Usuarios.apellido='mendez'),
or_(_and(Usuarios.edad==18, Usuarios.sexo=='M'), _and(Usuarios.edad==15,
Usuarios.sexo=='F')),
and_(func.day(Usuarios.cumleanios) == func.day(yesterday),
                                        func.month(Usuarios.cumleanios)
== func.month(yesterday),
                                        func.year(Usuarios.cumleanios)
== func.year(yesterday) ))).all()


Esa forma de hacerlo no me crea la sentencia con los parentesis, me hace
condiciones que tienen aand y or pero sin agruparlas con los parentesis.
Alguien sabe como puedo hacerlo para que me agrupe con parentesis la s
partes del where para que quede la sintaxis como quiero?

Gracias,

Javier.


Más información sobre la lista de distribución pyar