You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:57:03