首页 > 解决方案 > 更新数据库 mysql 上的记录时出现 Pymysql Tkinter 错误

问题描述

嗨,我正在学习 python,当我尝试更新数据库中的记录时,出现错误

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 'where Poke_id = 0' 附近使用的正确语法”)“

这是我的表 Nombre varchar Tipo varchar Genero Varchar Id_poke 主键 auto_increment

这是我的代码

from tkinter import *
from tkinter import ttk
import pymysql

class Pokemon:
    def __init__(self, ventana):
        self.ventana=ventana
        self.ventana.title("Administracion de Pokemones")
        self.ventana.geometry("1370x700+0+0")
        self.ventana.resizable(False,False)

        title=Label(self.ventana, text="Lista de Pokemones", bd=10, relief=RAISED, font=("Arial", 40, "bold"), bg="red", fg="white")
        title.pack(side=TOP)
        #========Variables
        self.Nombre_var=StringVar()
        self.Tipo_var=StringVar()
        self.Genero_var=StringVar()
        self.Id_poke_var=int()


        Manage_Frame=Frame(self.ventana, bd=4, relief=RIDGE, bg= "red")
        Manage_Frame.place(x=20, y=100, width=520, height=580)

        m_title=Label(Manage_Frame, text="Control de Pokemones",bg="yellow", fg="blue", font=("Arial", 30, 'bold'))
        m_title.grid(row=0,columnspan=2, pady=20)

        

        lbl_roll=Label(Manage_Frame,  text="Nombre:", bg="yellow", fg="blue", font=("Arial", 20, 'bold'))
        lbl_roll.grid(row=1, column=0, pady=10, padx=20, sticky="w")
        txt_Roll=Entry(Manage_Frame, textvariable=self.Nombre_var,font=("Arial", 15, "bold"), bd=5, relief=GROOVE)
        txt_Roll.grid(row=1, column=1,pady=10, padx=20, sticky="w")

        lbl_Tipo=Label(Manage_Frame, text="Tipo:", bg="yellow", fg="blue", font=("Arial", 20, 'bold'))
        lbl_Tipo.grid(row=2, column=0, pady=10, padx=20, sticky="w")
        txt_Tipo=Entry(Manage_Frame,textvariable=self.Tipo_var, font=("Arial", 15, "bold"), bd=5, relief=GROOVE)
        txt_Tipo.grid(row=2, column=1,pady=10, padx=20, sticky="w")

        lbl_Genero=Label(Manage_Frame, text="Genero:", bg="yellow", fg="blue", font=("Arial", 20, 'bold'))
        lbl_Genero.grid(row=3, column=0, pady=10, padx=20, sticky="w")
        combo_Genero=ttk.Combobox(Manage_Frame, textvariable=self.Genero_var, width=9, font=("Arial", 15, "bold"), state='readonly')
        combo_Genero['values']=("Masculino","Femenino")
        combo_Genero.grid(row=3, column=1, pady=10, padx=20)

        btn_Frame=Frame(Manage_Frame, bd=4, relief=RIDGE, bg="blue")
        btn_Frame.place(x=15, y=500, width=420)

        Add_btn=Button(btn_Frame, text="Agregar", width=7, command=self.agregar_Pokemones)
        Add_btn.grid(row=0, column=0, padx=10, pady=10)

        upd_btn=Button(btn_Frame, text="Actualizar", width=7 , command=self.update_data)
        upd_btn.grid(row=0, column=1, padx=10, pady=10)

        ers_btn=Button(btn_Frame, text="Eliminar", width=7)
        ers_btn.grid(row=0, column=2, padx=10, pady=10)

        lmp_btn=Button(btn_Frame, text="Limpiar", width=7, command=self.clear)
        lmp_btn.grid(row=0, column=3, padx=10, pady=10)

        Detail_Frame=Frame(self.ventana, bd=4, relief=RIDGE, bg="red")
        Detail_Frame.place(x=550, y=100, width=810,height=580)

        lbl_search=Label(Detail_Frame, text="Buscar Por:", bg="yellow", fg="blue", font=("Arial", 20, "bold"))
        lbl_search.grid(row=0, column=0, pady=10, padx=20, sticky="w")

        combo_search=ttk.Combobox(Detail_Frame, width=10, font=("Arial",15, "bold"),state='readonly')
        combo_search['values']=("Nombre","Tipo","Genero")
        combo_search.grid(row=0, column=2, padx=20, pady=10)

        txt_serach=Entry(Detail_Frame, width=20, font=("Arial",11, "bold"), bd=5, relief=GROOVE)
        txt_serach.grid(row=0, column=3, pady=10, padx=20,sticky="w")

        search_btn=Button(Detail_Frame, text="Buscar", width=7)
        search_btn.grid(row=0, column=4, padx=10, pady=10)

        showall_btn=Button(Detail_Frame, text="Mostrar Lista", width=10)
        showall_btn.grid(row=0, column=5, padx=10, pady=10)

        Table_Frame=Frame(Detail_Frame, bd=4, relief=RIDGE, bg="crimson")
        Table_Frame.place(x=20, y=70, width=760, height=500)

        scroll_x=Scrollbar(Table_Frame, orient=HORIZONTAL)
        scroll_y=Scrollbar(Table_Frame, orient=VERTICAL)

        self.Pokemon_Table=ttk.Treeview(Table_Frame, columns=("Id_poke","Nombre","Tipo","Genero"),xscrollcommand=scroll_x.set,yscrollcommand=scroll_y.set)
        scroll_x.pack(side=BOTTOM,fill=X)
        scroll_y.pack(side=RIGHT, fill=Y)
        scroll_x.config(command=self.Pokemon_Table.xview)
        scroll_y.config(command=self.Pokemon_Table.yview)
        
        
        self.Pokemon_Table.heading("Nombre", text="Nombre")
        self.Pokemon_Table.heading("Tipo", text="Tipo")
        self.Pokemon_Table.heading("Genero", text="Genero")
        self.Pokemon_Table.heading("Id_poke", text="Id_poke")
        self.Pokemon_Table['show']='headings'
        self.Pokemon_Table.column("Id_poke",width=100)
        self.Pokemon_Table.column("Nombre",width=100)
        self.Pokemon_Table.column("Tipo",width=100)
        self.Pokemon_Table.column("Genero",width=100)
        self.Pokemon_Table.bind("<ButtonRelease-1>", self.get_cursor)
        self.fetch_data()
        self.Pokemon_Table.pack(fill=BOTH, expand=1)

    def agregar_Pokemones(self):
        con=pymysql.connect(host='127.0.0.1', user='root', password='', db='pokedex')
        cur=con.cursor()
        cur.execute("insert into pokeinfo values (%s,%s,%s,%s)",(
                                    
                                    self.Nombre_var.get(),
                                    self.Tipo_var.get(),
                                    self.Genero_var.get(),
                                    self.Id_poke_var
                                    ))
        con.commit()
        self.fetch_data()
        self.clear()
        con.close()

    def fetch_data(self):
        con=pymysql.connect(host='127.0.0.1', user='root', password='', db='pokedex')
        cur=con.cursor()
        cur.execute("select Id_poke,Nombre,Tipo,Genero from pokeinfo")
        rows=cur.fetchall()
        if len(rows)!=0:
            self.Pokemon_Table.delete(*self.Pokemon_Table.get_children())
            for row in rows:
                self.Pokemon_Table.insert('', END, values=row)
            con.commit()
        con.close()
    def clear(self):
        self.Nombre_var.set("")
        self.Tipo_var.set("")
        self.Genero_var.set("")

    def get_cursor(self,ev):
        cursor_row=self.Pokemon_Table.focus()
        contents=self.Pokemon_Table.item(cursor_row)
        row=contents['values']
        
        self.Nombre_var.set(row[1])
        self.Tipo_var.set(row[2])
        self.Genero_var.set(row[3])



    def update_data(self):
        con=pymysql.connect(host='127.0.0.1', user='root', password='', db='pokedex')
        cur=con.cursor()
        cur.execute("update pokeinfo set Nombre=%s, Tipo=%s, Genero=%s, where Id_poke=%s",(
                                                                    
                                                                    self.Nombre_var.get(),
                                                                    self.Tipo_var.get(),
                                                                    self.Genero_var.get(),
                                                                    self.Id_poke_var
                                                                    

                                                                    
                                                                    ))
        con.commit()
        self.fetch_data()
        self.clear()
        con.close()
        
                                                                                

ventana = Tk()
ob=Pokemon(ventana)
ventana.mainloop()




如何解决这个问题?谢谢!

标签: mysqltkinterpymysql

解决方案


推荐阅读