Python - Error al hacer una select en Python contra BD sqlite3 en aplicacion CRUD

 
Vista:
sin imagen de perfil

Error al hacer una select en Python contra BD sqlite3 en aplicacion CRUD

Publicado por Pablo (1 intervención) el 24/01/2023 23:44:31
Llevo 6 meses programando.Estoy haciendo una aplicacion de una asociacion tipo CRUD en python con Tkinter, con varias frames. La principal es el manejo de los socios. La alta con 33 campos (entrys), funciona perfectamente. Mi problema ha sido cuando he ido a hacer la funcion de consulta, dentro de la clase socios. El acceso es a traves del boton de CONSULTA y para acceder debe introducir en el frame el nombre y los dos apellidos del socio, cada uno en un entry. La validacion de que ha rellenado los tres campos funciona bien. el problema es al introducir los datos, nombre y apellidos de un socio que está en la BD sqlite. al pulsar CONSULTAR da el error:

Exception in Tkinter callback
Traceback (most recent call last):
File "c:\users\pablo\appdata\local\programs\python\python39\lib\tkinter\__init__.py", line 1884, in __call__
return self.func(*args)
File "c:\Users\pablo\Desktop\ACARMAS_DEF\ventanas.py", line 438, in consulta_socio
cursor.execute(consulta)
TypeError: argument 1 must be str, not tuple

Es justo cuando va a hacer la SELECT.

La parte de mi programa referente a consulta es:

#--> Funcion para CONSULTAR un socio al pulsar el boton "CONSULTA"-------------------------
def consulta_socio(self):

nombre=self.nombre.get()
apel1=self.apel1.get()
apel2=self.apel2.get()

if (nombre=="") and (apel1=="") and (apel2==""):
messagebox.showwarning(title="CONSULTA SOCIO",message="Rellene los campos >> Nombre y 2 Apellidos << ")
else:
try:
with sqlite3.connect("database.db") as conn:
cursor=conn.cursor()
consulta=("SELECT * FROM socio WHERE nombre=? and apel1=? and apel2=?",nombre,apel1,apel2)
cursor.execute(consulta)
resultado=cursor.fetchall()
conn.commit()
print("resultado:",resultado)
except sqlite3.OperationalError as error:
print("Eror en Consulta BD: ", error)
messagebox.showwarning(title="Error",message="Error en CONSULTA SOCIO")


if resultado!="":
self.mostrar_campos(resultado)
else:
self.nombre.delete(0,END)
self.apel1.delete(0,END)
self.apel2.delete(0,END)
messagebox.showinfo(title="CONSULTA",message="Socio no existe")

def mostrar_campos(self,resultado):
for campo in resultado:
self.nombre.setvar(campo[1])
self.apel1.setvar(campo[2])
self.apel2.setvar(campo[3])
self.fecA.setvar(campo[4])
self.fecN.setvar(campo[5])

def widgets(self):
socios=Label(self,text="SOCIOS",bg="greenyellow",font="Arial 18")
socios.pack()
socios.place(x=0,y=0,height=30,width=1200)
self.frame=Frame(self,bg="lime green",bd=15,relief="groove")
self.frame.place(x=0,y=30,width=1200,height=800)
self.check_1=IntVar()
self.check_2=IntVar()
self.check_3=IntVar()
self.check_4=IntVar()
self.hoy=(datetime.today().strftime("%Y-%m-%d"))
self.fecha=IntVar
self.numero=NUMERIC
self.valido=False

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder