Problema Con Update Sql En Tkinter (Python)

  • Autor Autor TomasSanchexx
  • Fecha de inicio Fecha de inicio
TomasSanchexx

TomasSanchexx

No recomendado
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Tengo un problema al hacer una actualización de datos en la base de datos externa,

Tengo este código que si lo ejecuto en consola funciona perfectamente.

Python:
import pymysql

con = pymysql.connect(host='uuu',
user='uuu',
password='uuu',
database='uuu',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

city = (14, 'rivera', 2007654)
city1 = (21, 'Alcala2', 32276004)
nombre = "tary"
correo = "prueba@prueba.com"

def crearCliente():
try:
cur = con.cursor()
crearCliente = "UPDATE test1 SET name='"+nombre+"', email='"+correo+"' WHERE id = 19"
cur.execute(crearCliente)
con.commit()

#con.close()

print("Se guardo correctamente")
except:
print ("Error")

finally:
try:
con.close()
except:
None


def mostrarCliente():
try:
con1 = pymysql.connect(host='uuu',
user='uuu',
password='uuu',
database='uuu',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)


cur1 = con1.cursor()
mostrarCliente = "SELECT * FROM test1 WHERE id = 19"
cur1.execute(mostrarCliente)
rows = cur1.fetchall()

#con.close()

print("El cliente es:", rows)
except:
print("Error2")

finally:
try:
con1.close()
except:
None




crearCliente()
mostrarCliente()
print ("Se ha guardado")

Pero al hacer el código en tkinter, se ejecuta el aplauso perfecto, y hago clic en el botón y sale que se ha actualizado, pero miro la base de datos y no se ha cambiado nada.

Sin embargo, si ejecuto el código en la consola si funciona y se realiza el cambio, pero quiero hacerlo en una aplicación gráfica.

Python:
from tkinter import *
from tkinter import ttk
import pymysql

####### FUNCIONES #######

city = (9, 'Kiev', 2887000)

nombre = "TARY"
correo = "tary@tary.com"

def actualizarCliente():
try:
con2 = pymysql.connect(host='uuu',
user='uuu',
password='uuu',
database='uuu',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)


cur2 = con2.cursor()
actualizarCliente = "UPDATE test1 SET name='tomas' WHERE id = 19"
cur2.execute(actualizarCliente)

#con.close()

ttk.Label(mainframe, text="Se actualizo el cliente").grid(column=40, row=150, sticky=W)
except:
print("Error2")

finally:
try:
con2.close()
except:
None

def mostrarCliente():
try:
con1 = pymysql.connect(host='uuu',
user='uuu',
password='uuu',
database='uuu',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)


cur1 = con1.cursor()
mostrarCliente = "SELECT * FROM test1 WHERE id = 19"
cur1.execute(mostrarCliente)
rows = cur1.fetchall()

#con.close()

ttk.Label(mainframe, text=rows).grid(column=40, row=150, sticky=W)
except:
print("Error2")

finally:
try:
con1.close()
except:
None



####### VENTANA Tkinter #######

root = Tk()
root.title("Mostrar datos")
root.geometry("400x400")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

##### Textos y Botones #####

ttk.Label(mainframe, text="nada").grid(column=3, row=2, sticky=W)

ttk.Button(mainframe, text="MOSTRAR CLIENTE", command=mostrarCliente).grid(column=40, row=40, sticky=W)
ttk.Button(mainframe, text="ACTUALIZAR CLIENTE", command=actualizarCliente).grid(column=40, row=60, sticky=W)


root.mainloop()

¿Qué esta mal para que no se haga efectivo el cambio?
 
Te falta hacer el commit.

Insertar CODE, HTML o PHP:
con.commit()

Luego del execute()

PD: Usa algun ORM; no hagas todo ese trabajo asi, que ademas de ser mas laborioso, te va a traer problemas de seguirad. Por ejemplo usa sqlalchemy.
 
Te falta hacer el commit.

Insertar CODE, HTML o PHP:
con.commit()

Luego del execute()

PD: Usa algun ORM; no hagas todo ese trabajo asi, que ademas de ser mas laborioso, te va a traer problemas de seguirad. Por ejemplo usa sqlalchemy.

Muchas gracias por su respuesta, era ese el problema.

¿Me podría explicar a lo que se refiere con ORM? No lo entiendo si me pudiese decir así por encima como es. Gracias.
 

Temas similares

Atrás
Arriba