Python3+tkinter操作SQLite3删除用户的函数传参问题求助
问题修复方案
代码现存问题
- Entry组件赋值错误:
Entry().grid()写法中grid方法返回None,导致你存储的user_id_delete变量为空,无法获取输入内容 - 函数调用逻辑错误:delete_function中重复调用password_delete(),该函数仅负责生成界面无返回值,无法拿到待删除的user_id
- 未正确获取输入框内容:即使拿到Entry对象,也需要调用
get()方法才能得到用户输入的user_id值
修复后完整代码
from tkinter import * import sqlite3 root = Tk() root.geometry('500x700') # 提前声明存储Entry组件的全局变量 user_id_entry = None def delete_function(): # 直接从Entry组件获取输入的user_id user_id_delete = user_id_entry.get().strip() # 空值判断避免无效删除 if not user_id_delete: print("请输入要删除的user_id") return conn = sqlite3.connect('instructor_db.db') c = conn.cursor() delete_variable = """DELETE FROM instructors WHERE user_id = ?""" c.execute(delete_variable, (user_id_delete, )) # 打印删除行数验证执行结果:返回1为删除成功,0为无匹配记录 print(f"成功删除{c.rowcount}条记录") conn.commit() conn.close() def password_delete(): global user_id_entry password_delete_screen = LabelFrame(root, width=500, height=700) password_delete_screen.pack() password_delete_screen.propagate(0) Label(password_delete_screen, text = "User Name").grid(row=0, column=0) # 先创建Entry对象赋值,再单独调用grid user_id_entry = Entry(password_delete_screen) user_id_entry.grid(row=0, column=1) log_in_btn = Button(password_delete_screen, text = "Delete User", command = delete_function) log_in_btn.grid(row=2, column=0, columnspan=2) password_delete() root.mainloop()
逻辑验证说明
你原本的删除逻辑写法是正确的,参数化查询的方式也避免了SQL注入风险,参数传递正确后可正常执行删除操作:
- 执行c.execute后可通过
c.rowcount属性判断删除结果,值为1代表匹配到对应user_id并删除成功,值为0代表数据库中无对应该user_id的记录 - 若要进一步验证,可在删除操作前后加查询语句,确认对应记录是否存在
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

