Re: [Python-es] SqlAlchemy, no consigo hacer un join
¡¡ Impresionante !! Muchas gracias Ricardo. Te debo una. Me ha venido muy muy bien tu explicación. 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: ¡ 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ó: 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/
Re: [Python-es] SqlAlchemy, no consigo hacer un join
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: > ¡ 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 list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] SqlAlchemy, no consigo hacer un join
¡ 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/
Re: [Python-es] SqlAlchemy, no consigo hacer un join
Solo sqlalchemy con PyQt para escritorio. Saludos. El 05/03/2016 a las 2:19, Juan BC escribió: estas usando sqlalchmy solo o algo tipo flask-sqlalchemy? El 04/03/2016 20:45, "kausdiv"escribió: Hola. Tengo un pequeño proyecto que incluye dos tablas: artículos y movimientos. Lo que trato es de conseguir una consulta en sqlalchemy que me de cada artículo con dos campos al final con la suma de entras y salidas desde la tabla movimientos session.query(articulos.id, articulos.nombre, func.sum(movimientos.uEntrada).label('Entradas'), func.sum(movimientos.uSalida).label('Salidas')).join(movimientos, articulos).all() Pues bien esto genera el siguiente error: "OperationalError: (sqlite3.OperationalError) ambiguous column name: articulos.id [SQL: u'SELECT articulos.id AS articulos_id, articulos.nombre AS articulos_nombre, sum(movimientos.uEntrada) AS "Entradas", sum(movimientos.uSalida) AS "Salidas" FROM articulos JOIN movimientos ON articulos.id = movimientos.id_articulo JOIN articulos ON articulos.id = movimientos.id_articulo'] " Si cambio en el join(articulos, movimientos) sale otro error y en ningún caso consigo el listado. Detalle de la tabla de movimientos con su clave foranea a articulos: class movimientos(Base): __tablename__ = "movimientos" id = Column(Integer, nullable= False, primary_key= True, autoincrement= True) id_articulo = Column(ForeignKey(articulos.id)) ¿ como puedo conseguir ese listado ? Saludos. ___ 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/ ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Gráficas de información
matplotlib, bokeh, plotly, ggplot,... https://wiki.python.org/moin/NumericAndScientific/Plotting El 5/3/16, David Samaniegoescribió: > Buenas noches, estoy empezando a utilizar python y he venido realizando > algunos scripts que toman ifinoctets en un router juniper. Esa información > la almaceno en una base de datos y ahora lo que pretendo es generar una > grafica en base a los valores almacenados. > > Alguna sugerencia de librerías que me puedan facilitar y lograr realizar lo > pensado > > Desde ya muchas gracias. > > Saludos > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/