从tkinter中删除选定项将返回sqlite3,操作错误:无此列:一○ ○二

fxnxkyjh  于 2022-12-23  发布在  SQLite
关注(0)|答案(1)|浏览(141)

我正在尝试从TKinter GUI的树视图中删除SQLite数据库中的一个项目。树视图返回一个类似I002的值。尝试转换为字符串或变量,也没有任何效果。以下是删除函数代码

def Database():
    global conn, cursor
    conn = sqlite3.connect('pythontut.db')
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS `anno` (mem_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, daytype TEXT, time TEXT, audiofile TEXT)")
    
def Create():
    
    TIME = CHOUR.get() +":"+ CMIN.get() + ":"+ CSEC.get() + " "+CPERIOD.get()
    print(TIME)

    if  DAYTYPE.get() == "" or TIME == "":
        txt_result.config(text="Please complete the required field!", fg="red")
    else:
        Database()
        cursor.execute("INSERT INTO `anno` (daytype, time, audiofile) VALUES(?, ?, ?)", (str(DAYTYPE.get()), str(TIME), str(AUDIO_SELECTION.get())) )
        conn.commit()
        DAYTYPE.set("")
        cursor.close()
        conn.close()
        txt_result.config(text="Created a data!", fg="green")

def Read():
    tree.delete(*tree.get_children())
    Database()
    cursor.execute("SELECT * FROM `anno` ORDER BY `daytype` ASC")
    fetch = cursor.fetchall()
    for data in fetch:
        tree.insert('', 'end', values=(data[0], data[1], data[2], data[3]))
    cursor.close()
    conn.close()
    txt_result.config(text="Successfully read the data from database", fg="black")

def Delete():
    
    selected_items = tree.selection()
    Database()  
    for selected_item in selected_items:          
        tree.delete(selected_item)
        print(str(selected_item))
        cur = conn.cursor()
        cur.execute("DELETE FROM anno WHERE mem_id = ?", (selected_items,))
        conn.commit()
    conn.close()

返回以下错误

cur.execute(sql)
sqlite3.OperationalError: no such column: I002

我正在尝试从TKinter以及SQLite数据库中的树视图中删除选定的项目。

vmjh9lq9

vmjh9lq91#

我附上下面的代码,工程.要从选择值,我们需要使用tree.item(i, "values")[0],0表示列。i保存这个奇怪的值I005来自树视图位置(如果表中有5个项目,则第5个项目显示为I005)。使用上面的命令,它会取出表中的值&该值可以存储在变量中(如下所示)。那个奇怪的值,他们称之为iid(仍然不知道它是什么)。下面是附加的片段,在treeview以及数据库中工作。

def DeleteRecord(id_num):
    con = sqlite3.connect("pythontut.db")
    cur = con.cursor()
    cur.execute("DELETE FROM anno WHERE mem_id = ?", (id_num,))
    con.commit()
    con.close()

def DeleteData():
    try:
        messageDelete = tkMessageBox.askyesno("Confirmation", "Do you want to permanently delete this record?")
        if messageDelete > 0:
            select_items = tree.selection()
        for i in select_items:
            id_num = tree.item(i, "values")[0] #Returns data inside that treeview selection column 0 (iid)
            print(id_num)
            tree.delete(i)
            DeleteRecord(id_num)
    except Exception as e:
        print(e)

相关问题