mysql - 更新数据库 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()
如何解决这个问题?谢谢!
解决方案
推荐阅读
- apache-kafka - System.ObjectDisposedException:句柄被破坏
- php - PHP 一个注入的对象可以访问它被注入的对象的属性吗?
- html - 如何选择特定样式的 google family-font?
- dapper - Dapper.plus 从 DapperPlusManager 获取表名和键列名
- mysql - 如何按日期对查询结果排序,然后在mysql中的特定列值
- javascript - 将定义属性的子集从一个对象复制到另一个对象
- vue.js - 在修改另一个变量时限制与 vuejs / 变量值更改的双向绑定
- r - R中的并行处理函数(例如future_apply)是否有提前终止选项?
- ssms - SSMS 导入/导出工具没有选择数据库的选项
- excel - 3 条件格式规则不能一起工作