[Python-es] sqlalchemy, campos calculados y acumulados

Marcelo Barbero marcelobarbero en arnet.com.ar
Sab Jul 18 16:57:49 CEST 2015


El 18/07/2015 a las 04:36, Kaus Div escribió:
> Marcelo lo que pretendo es que forme parte de la base de datos, es decir
> un campo calculado.
>
> Por ejemplo la tabla de conceptos ahora es:
> id = Column(xxxx)
> Nombre = Column(xxxx)
> Agregando:
> Suma_ent = Column(xxx)
> Suma_sal = Column(xxx)
>
>
>
> Y que esas suman correspondan a la entradas de caja cucho concepto sea
> el elegido en el apunte de caja
>
> Igual en la tabla Entidades.
>
>
> El 17 de julio de 2015, 18:41, Marcelo Barbero
> <marcelobarbero en arnet.com.ar <mailto:marcelobarbero en arnet.com.ar>> escribió:
>
>     El 17/07/2015 a las 06:56, kausdiv escribió:
>
>         Hola estoy aprendiendo sqlalchemy, y lo que más me está costando
>         es el
>         tema del asunto.
>
>         Practicando he creado una especie de libro de caja este sería el
>         esquema:
>
>
>         Esto ya funciona tanto en una aplicación Camelot como en consola.
>
>         Mi problema que no acabo de entender es como hacer que tanto en
>         Conceptos como en Entidades tenga la suma del Caja.Entrada y
>         Caja.Salida
>         de los apuntes de caja que tienen relacionados.
>
>         He probado con hybrid property y con @aggregate.  Solo consigo
>         errores.
>
>         ¿ Alguna ayuda que me oriente ?
>
>         Saludos.
>
>
>     Sobre una variable de conexión que voy a llamar conn, podés hacer:
>
>     consulta = "SELECT Conc.Nombre, Ent.Nombre, SUM(C.Entrada),
>     SUM(C.Salida) FROM Caja C, Conceptos Conc, Entidades Ent WHERE
>     C.id_Conceptos = Conc.id AND C.id_Entidad = Ent.id GROUP BY
>     Conc.Nombre, Ent.Nombre"
>     resultados = conn.execute(consulta)
>
>     #para probar
>     for i in resultados.fetchall():
>           print i
>
>     Comentario: en la consulta se pueden agregar más condiciones a la
>     cláusula WHERE y a los resultados
>
>     Marcelo
>     _______________________________________________

La violación de normalización de la base de datos que pensás hacer no 
tiene sentido hacerla con un campo calculado, sino con un campo normal 
que se actualice mediante un trigger (si lo acepta la base de datos) o 
en código, dentro de transacciones.

Marcelo Barbero


Más información sobre la lista de distribución Python-es