Re: [Python-es] SqlAlchemy, no consigo hacer un join

2016-03-05 Por tema kausdiv

  
  

  ¡¡ 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

2016-03-05 Por tema Ricardo Cárdenes
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

2016-03-05 Por tema 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/


Re: [Python-es] SqlAlchemy, no consigo hacer un join

2016-03-05 Por tema kausdiv

  
  
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

2016-03-05 Por tema Kiko
matplotlib, bokeh, plotly, ggplot,...

https://wiki.python.org/moin/NumericAndScientific/Plotting

El 5/3/16, David Samaniego  escribió:
> 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/