Foros del Web » Programando para Internet » Python »

Error en consulta con base de datos postgresql en Pyhton

Estas en el tema de Error en consulta con base de datos postgresql en Pyhton en el foro de Python en Foros del Web. Buenas tardes, estoy dando mis primeros pasos en python. Logre conectarme con una base de datos postgresql, he hecho consultas basicas e insertado datos. El ...
  #1 (permalink)  
Antiguo 09/09/2014, 14:06
 
Fecha de Ingreso: septiembre-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Error en consulta con base de datos postgresql en Pyhton

Buenas tardes, estoy dando mis primeros pasos en python. Logre conectarme con una base de datos postgresql, he hecho consultas basicas e insertado datos.

El problema que ahora tengo es con otra consulta. Quiero que la consulta me muestre un rango de fechas almacenadas en la base de datos. Hay fechas que se repiten, por ejemplo:
2014-09-08
2014-09-08
2014-09-09
2014-09-09

Necesito mostrar la fechas pero sin repetirlas asi:
2014-09-08
2014-09-09

Hice la siguiente consulta:

Código:
consulta1 = conn.cursor()
consulta1.execute("SELECT * FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s GROUP BY historial.fecha",{'cedula': cedula[0], 'desde': desde, 'hasta': hasta})
Pero aparece el siguiente mensaje de error:

Cita:
psycopg2.ProgrammingError: la columna «historial.id» debe aparecer en la cláusula GROUP BY o ser usada en una función de agregación
LÍNEA 1: SELECT * FROM historial WHERE cedula='12837465' AND fecha>='...
^
El indicador del error se ubica en el asterisco (*) no al principio de la linea como aparece aqui en el post

ya he probado agregando el campo id pero de esa manera hace la consulta trayendo las fechas pero tambien las repetidas o sea no las agrupa.

No se que estoy haciendo mal, o si no estoy usando bien la clausula GROUP BY

Si alguien me puede guiar hacia una solución se lo agradeceria.

Saludos.
  #2 (permalink)  
Antiguo 09/09/2014, 14:35
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Cita:
Iniciado por ljimenez29 Ver Mensaje
No se que estoy haciendo mal, o si no estoy usando bien la clausula GROUP BY
Exactamente ese es el error. No es error de python en si. Mas aun creo que es un error de concepto que tienes.

Tus fechas únicas
Código:
SELECT fecha FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s GROUP BY historial.fecha
¿Cédula y fechas únicas?
Código:
SELECT cedula, fecha FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s GROUP BY historial.cedula, historial.fecha
Tal vez solo te interesa, la fecha mas reciente o menos reciente.
Código:
SELECT * FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s ORDER BY historial.fecha LIMIT 1
  #3 (permalink)  
Antiguo 09/09/2014, 16:37
 
Fecha de Ingreso: septiembre-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Buenas tardes razpeitia, gracias por responder.

Te explico lo que hace el programa.

Se conecta a una base de datos donde hay una tabla con los siguientes campos:

id, cedula, hora_entrada, hora_salida, observacion, turno, fecha

La persona introduce su cedula y el sistema almacena valores en:

cedula: 12345678
hora_entrada: 8:30:00
hora_salida: 00:00:00
turno: M
fecha: 2014-09-09


Si vuelve a instroducir la cedula se actualiza ese registro, que quedaria asi:

cedula: 12345678
hora_entrada: 8:30:00
hora_salida: 11:45:00
turno: M
fecha: 2014-09-09


Eso seria un solo registro para el turno de la mañana (M)

Para el turno de la tarde(T) es el mismo proceso, solo que se crea un nuevo registro. Por lo tanto se repite la cedula y la fecha


Luego la consulta la hago a traves de 2 ComboBox, en uno selecciono la cedula y en el otro el mes.

Cuando selecciono el mes creo dos variables con la primera fecha del mes(desde) y con la ultima fecha de ese mes(hasta). Por ejemplo desde = "2014-09-01", hasta = "2014-09-30"

Con la cedula busco las fechas asociadas a esa cedula en el rango de ese mes (desde, hasta).

El programa deberia entonces mostrarme todas la fechas que esten en ese rango, decir deberia mostrarme algo asi:
2014-09-06
2014-09-07
2014-09-08
2014-09-09

Pense que con el GROUP BY lo haria pero sale el error comentado en el primer post. Si quito el GROUP BY hace la consulta sin error pero me muestra las fechas de los 2 turnos, decir fechas repetidas.

Probe la consulta que colocas con LIMIT 1 y efectivamente me muestra la fecha menos reciente, pero asi no me sirve.


De todas maneras nuevamente gracias por responder.

Saludos.
  #4 (permalink)  
Antiguo 09/09/2014, 16:45
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Fechas únicas:
Código SQL:
Ver original
  1. SELECT DISTINCT fecha FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s
  #5 (permalink)  
Antiguo 10/09/2014, 10:24
 
Fecha de Ingreso: septiembre-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Saludos razpeitia, con esa consulta sale el siguiente mensaje error:

Cita:
fecha = registro[8]
IndexError: tuple index out of range
Esa linea esta dentro de un for que uso para mostrar los registros de la base de datos.

Saludos.
  #6 (permalink)  
Antiguo 10/09/2014, 11:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Lo que pasa es que

Código SQL:
Ver original
  1. SELECT DISTINCT fecha

Solo entrega una columna, la fecha, para ser mas exacto solo entrega:
Código:
2014-09-06
2014-09-07
2014-09-08
2014-09-09
Tal como lo pediste.

Si quieres el record entero entonces usa distinct on.
Código SQL:
Ver original
  1. SELECT DISTINCT ON (fecha) * FROM historial WHERE cedula=%(cedula)s AND fecha>=%(desde)s AND fecha<=%(hasta)s
  #7 (permalink)  
Antiguo 10/09/2014, 11:53
 
Fecha de Ingreso: septiembre-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Error en consulta con base de datos postgresql en Pyhton

Muchas gracias razpeitia, ahora si muestra bien las fechas.

Seguire haciendo mas cosas con python y leere mas sobre postgresql. :)

Gracias nuevamente.

Saludos.

Etiquetas: campo, gui, ip, postgresql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:31.