Problema com Update Sql no Tkinter (Python)

  • Autor Autor TomasSanchexx
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
TomasSanchexx

TomasSanchexx

Beta
No recomendado
Usuário com poucas negociações! Use sempre o saldo do 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?
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Te falta hacer el commit.

Inserir CODE, HTML ou 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.

Inserir CODE, HTML ou 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.
 

Tópicos similares

Voltar
Topo