【问题标题】:Deleting from SQLlite3 in python3在 python3 中从 SQLite3 中删除
【发布时间】:2021-11-08 09:00:48
【问题描述】:

我刚开始编码并尝试从 SQLite 数据库中删除用户 ID。我已经用谷歌搜索并观看了数小时的视频,试图找到一种方法让这段代码工作。请帮忙。我在树莓派上用 Python 3.X 编写,并使用 tkinter 作为 GUI。我的数据库有 4 列(first_name、last_name、user_id 和 password)。 password_delete 函数设置屏幕以获取输入,而 delete_funtion 应该删除输入的用户 id。目前我无法在两个函数之间传递 user_id 变量。一旦变量被传递,删除函数会起作用吗?非常感谢您的帮助。

from tkinter import *
import sqlite3

root = Tk()
root.geometry('500x700')

def delete_function():
    conn = sqlite3.connect('instructor_db.db')
    c = conn.cursor()
    
    user_id_delete = password_delete()
    print(user_id_delete)
    
    delete_variable = """DELETE FROM instructors WHERE user_id = ?"""
    c.execute(delete_variable,(user_id_delete, ))

    conn.commit()
    conn.close()

def password_delete():
    password_delete_screen = LabelFrame(root, width=500, height=700)
    password_delete_screen.pack()
    password_delete_screen.propagate(0)
    
    user_id_lbl = Label(password_delete_screen, text = "User Name").grid(row=0, column=0)
    
    global user_id_delete
    
    user_id_delete = Entry(password_delete_screen).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()

【问题讨论】:

    标签: python python-3.x sqlite tkinter


    【解决方案1】:

    首先,您在 SO 在以下行中多次询问了一个常见错误:

    user_id_delete = Entry(password_delete_screen).grid(row=0, column=1)
    

    user_id_delete 是 None 因为它是 grid(...) 的结果,而不是 Entry(...)。你需要把它分成两行:

    user_id_delete = Entry(password_delete_screen)
    user_id_delete.grid(row=0, column=1)
    

    对于您的问题,您可以直接将输入内容传递给delete_function(),而不是使用全局变量:

    def delete_function(user_id_delete):
        if user_id_delete:
            conn = sqlite3.connect('instructor_db.db')
            c = conn.cursor()
    
            delete_variable = """DELETE FROM instructors WHERE user_id = ?"""
            c.execute(delete_variable, (user_id_delete,))
            if c.rowcount:
                print('User deleted:', user_id_delete)
            else:
                print('User not found:', user_id_delete)
    
            conn.commit()
            conn.close()
        else:
            print('User input is empty')
    
    def password_delete():
        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)
    
        user_id_delete = Entry(password_delete_screen)
        user_id_delete.grid(row=0, column=1)
    
        log_in_btn = Button(password_delete_screen, text = "Delete User",
                            command=lambda: delete_function(user_id_delete.get()))
        log_in_btn.grid(row=2, column=0, columnspan=2)
    

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 2018-05-03
      • 1970-01-01
      • 2011-08-30
      • 2020-08-31
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多