¿Por qué no te permiten las tuplas concatenar? :-? Ya puestos, yo lo pondría así:
query = ( session.query(movimientos) .filter(movimientos.fecha >= d1, movimientos.fecha <= d2) .filter(movimientos.id_almacen == almId) ) if en.isdigit(): query = query.filter(movimientos.id_entidad == en) elif articulo.isdigit(): query = query.filter(movimientos.id_articulo == articulo) else: query = query.filter(movimientos.tipo.like(tpn)) mov = query.all() pero es preferencia personal... 2016-03-07 7:59 GMT-10:00 kausdiv <kaus...@gmail.com>: > Hola de nuevo. > > Me surge otra cuestión: > > en el buscador que estoy haciendo de movimientos hay distintos controles y > en función de lo que busques se genera un filtro u otro: > > # Filtro, estado inicial, siempre hay fechas y id de almacen. > filtro = (movimientos.fecha>= d1, movimientos.fecha<=d2, > movimientos.id_almacen == almId, movimientos.tipo.like(tpn)) > if articulo.isdigit(): #movimientos de un artículo concreto. > filtro = (movimientos.fecha>= d1, movimientos.fecha<=d2, > movimientos.id_almacen == almId, movimientos.id_articulo == articulo) > if en.isdigit(): > filtro = (movimientos.fecha>= d1, movimientos.fecha<=d2, > movimientos.id_almacen == almId, movimientos.id_entidad == en) > > mov = session.query(movimientos).filter(*filtro).all() > > > Esto no la mejor forma de hacerlo, pero no se otra. Estas tuplas no me > permiten concatenar > > ¿ Como podría hacerse ? > > Había pensado como alternativa usar "Like" en cada campo como en el "tipo" > que cuando son todos lleva "%" ¿ sería correcto usar este sistema ? > > Saludos. > > El 05/03/2016 a las 12:28, Ricardo Cárdenes escribió: > > Un JOIN normal hace exactamente eso: un cruce entre las dos tablas > mostrando las filas donde hay coincidencias. Es lo que se llama "inner > join" (una combinación interna). Lo que tú quieres es que se muestren todas > las filas de una de las tablas que participan en la combinación y que, de > la otra, aparezcan los datos que coinciden. Esto se denomina "outer join" > (combinación externa). Las combinaciones externas las tienes de dos tipos, > por la izquierda y por la derecha, dependiendo de qué tabla tenga que salir > entera. Es decir: > > .... FROM articulos LEFT OUTER JOIN movimientos ... > > Obtendrá una nueva tabla donde aparecerán todas las filas de "artículos" > (la tabla "por la izquierda") y también las filas de movimientos que > correspondan. Para las filas de artículos sin movimientos, esas columnas > aparecerán (normalmente) como valores nulos, no como 0. Eso te debería dará > valores incorrectos para el sumatorio, porque NULL + valor numérico debería > ser NULL. Una solución es usar, por ejemplo, la función COALESCE (es del > estándar SQL y SQLite la soporta). Se usaría así: > > func.sum(func.coalesce(movimientos.uEntrada, 0)) > > si no recuerdo mal. Lo que hace COALESCE es tomar una serie de valores y > devolver el primero que no sea NULL. De esa manera, si movimientos.uEntrada > es NULL, devolverá 0. > > Saludos, > Ricardo > > 2016-03-04 23:25 GMT-10:00 kausdiv <kaus...@gmail.com>: > >> ¡ Perfecto ! >> >> Es eso. Pero tengo otro problema: >> >> Supón que tengo 5 artículos dados de alta, y solo 2 tienen movimientos. >> >> La consulta actual solo muestra los 2 que tienen movimientos. >> >> ¿ Como podría hacer que aparezcan los 5, y los que no tienen movimientos >> que salgan a 0 las entras y salidas ? >> >> Saludos. >> >> El 05/03/2016 a las 6:46, Ricardo Cárdenes escribió: >> >> >> session.query(articulos.id, articulos.nombre, >> func.sum(movimientos.uEntrada).label('Entradas'), >> func.sum(movimientos.uSalida).label('Salidas')).join(movimientos, >> articulos).all() >> >> >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > > _______________________________________________ > Python-es mailing > listPython-es@python.orghttps://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/