Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Filtrado de fechas en tkinter de python con sqlite
#1
Buen dia amigos!!!! Quiero hacer un filtrado de fechas en python lo que hice es tomar la fecha con la ayuda de datatime como fecha de estudio (segun ese dia se paga el estudio) y se guarda en la base de datos con ese formato (tipo datetime) la idea es hacer un corte de las ventas de cada mes, y lo que hice fue usar la sentencia:

"SELECT * FROM paciente WHERE fecha_de_estudio BETWEEN 09, Jul, 2019 AND 23, Jul, 2019"

En este caso si se hace el filtrado y se obtiene el rango de fechas esperado, entonces coloqué un Entry de Tkinter para hacerlo ya con variables y no logro obtener el resultado esperado.

Label(self.tab2, text = 'Fecha de inicio: ', bg = 'gray').grid(row = 1, column = 0, sticky = W + E)
self.fecha_inicial = Entry(self.tab2, width = 10)
self.fecha_inicial.focus()
self.fecha_inicial.grid(row = 1, column = 1, pady = 10, sticky = W)

Label(self.tab2, text = 'Fecha final: ', bg = 'gray',).grid(row = 2, column = 0, sticky = W + E)
self.fecha_final = Entry(self.tab2, width = 10)
self.fecha_final.grid(row = 2, column = 1, pady = 10, sticky = W )

Button(self.tab2, text = 'Seleccionar mes', command = self.get_mes).grid(row = 2, column = 2, pady = 10, padx = 10, sticky = W + E ) 


def run_query(self, query, parameters = ()): 

    with sqlite3.connect(self.db_lab) as conn:
        cursor = conn.cursor()
        result = cursor.execute(query, parameters)
        conn.commit()
    return result
    # Consulta de datos
    query = ("SELECT * FROM paciente WHERE fecha_de_estudio BETWEEN ? AND ?", self.fecha_i.date(), self.fecha_f.date())

    db_rows = self.run_query(query)

def get_mes(self):
    self.fecha_i = datetime.strptime(self.fecha_inicial.get(), '%d, %b, %Y')
    self.fecha_f = datetime.strptime(self.fecha_final.get(), '%d, %b, %Y')    

    records = self.tree2.get_children()

    for element in records:
        self.tree2.delete(element)

    query = ("SELECT * FROM paciente WHERE fecha_de_estudio BETWEEN ? AND ?", self.fecha_i.date(), self.fecha_f.date())

    db_rows = self.run_query(query)

    for row in db_rows:
    self.tree2.insert('', 0, text = row[0], values = (row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19]))

Me pueden apoyar en este problema que tengo por favor, no logro encontrar mi error y una pregunta adicional a que se refiere este error: 

ValueError: operation parameter must be str (me aparecia cuando modificaba la busqueda)

muchas gracias!!!!
Responder
#2
Hola. En tu función run_query(), el primer argumento tiene que ser una cadena y el segundo una tupla. Al hacer esto:

  1. db_rows = self.run_query(query)


...estás pasando como primer argumento una tupla ─cuando debería ser una cadena─ y omitiendo el segundo. Debería ser algo así:

  1. db_rows = self.run_query("SELECT * FROM paciente WHERE fecha_de_estudio BETWEEN ? AND ?", (self.fecha_i.date(), self.fecha_f.date()))


Saludos
Responder
#3
(30-07-2019, 02:56 PM)Francisco escribió: Hola. En tu función run_query(), el primer argumento tiene que ser una cadena y el segundo una tupla. Al hacer esto:

  1. db_rows = self.run_query(query)


...estás pasando como primer argumento una tupla ─cuando debería ser una cadena─ y omitiendo el segundo. Debería ser algo así:

  1. db_rows = self.run_query("SELECT * FROM paciente WHERE fecha_de_estudio BETWEEN ? AND ?", (self.fecha_i.date(), self.fecha_f.date()))


Saludos

Muchas gracias Francisco eres muy amable!!! se solucionó el problema ya se puede ver en consola aunque no se puede visualizar en la tabla sigo buscando el origen del porque no se puede visualizar en ese Tree, alguna idea del porque no se ve?? gracias de nuevo

Saludos!!!!
Responder
#4
¿Te aparece algún error relacionado con eso?
Responder
#5
(02-08-2019, 11:27 AM)Francisco escribió: ¿Te aparece algún error relacionado con eso?
No amigo, inicialmente aparece la tabla vacía para indicar que esta esperando que se ingresen las fechas al presionar el boton es donde se hace la funcion get_pacients y en teoria se debe de llenar la tabla con la busqueda de la query que me hiciste el favor de ayudar, puse un print para ver en terminal y se ven los datos pero la tabla no se llena

(02-08-2019, 03:06 PM)Johnny_LS escribió:
(02-08-2019, 11:27 AM)Francisco escribió: ¿Te aparece algún error relacionado con eso?
No amigo, inicialmente aparece la tabla vacía para indicar que esta esperando que se ingresen las fechas al presionar el boton es donde se hace la funcion get_pacients y en teoria se debe de llenar la tabla con la busqueda de la query que me hiciste el favor de ayudar, puse un print para ver en terminal y se ven los datos pero la tabla no se llena

Amigo, ya lo solucioné me falto al final de la query colocar "fetchall()" y ya se llena la tabla!!! muy amable!!!!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)