PYTHON SQLITE3从列表中删除

问题描述

我想从列表框中选择的数据中删除数据。我尝试了一切,但没有用。我尝试在简单的文件。有效。我在这里写了相同的代码,但是没有用。我被困了两天。请帮忙。

from tkinter import *
import sqlite3
from tkinter import messageBox
import randevuEkleme as fRE
from tkcalendar import *


def randevularFormunuAc():
    root = Tk()
    root.title("Randevu Listesi Formu")
    root.geometry("750x500")

    randevuListesi = ListBox(root,width=50,bg="yellow",selectmode=SINGLE)

    takvim = Calendar(root,selectmode="day",year=2020,month=5,day=22)
    takvim.grid(row=0,column=0)
    randevuListesi.grid(row=1,column=0)
    secilen = randevuListesi.curselection()

    def randevulariListele(): #OK!
        con = sqlite3.connect('veri2.db')
        c = con.cursor()
        c.execute("SELECT * FROM randevular")
        liste = c.fetchall()
        con.commit()
        con.close()
        randevuListesi.delete(first=0,last=END)
        for i in liste:
        randevuListesi.insert(END,i)

    con = sqlite3.connect('veri2.db')
    c = con.cursor()
    c.execute("SELECT * FROM randevular")
    liste = c.fetchall()
    con.commit()
    con.close()
    for i in liste:
        randevuListesi.insert(END,i)

    def randevuSil():  
        con = sqlite3.connect('veri2.db')
        c = con.cursor()

        # Problem is HERE!!!   
        c.execute("DELETE FROM randevular WHERE rowid = (?)",(secilen[0] + 1,))
        
        # PROBLEMIS HERE!!!
        con.commit()
        con.close()

    btnListele = Button(root,text="Randevuları Listele",command=randevulariListele)
    btnRandevuEkle = Button(root,text="Randevu Ekle",command=fRE.randevuEklemeFormunuAc)
    btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil()) !!!!
    btnCikis = Button(root,text="Geri",command=root.quit)
    btnListele.grid(row=2,column=0)
    btnRandevuEkle.grid(row=2,column=1)
    btnRandevuSil.grid(row=2,column=2)
    btnCikis.grid(row=2,column=3)

    root.mainloop()

错误消息是:

File "C:\Users\kutla\PycharmProjects\fizyoOta1.0\randevularFormu.py",line 43,in randevuSil
c.execute("DELETE FROM randevular WHERE rowid = (?)",))
IndexError: tuple index out of range

解决方法

快速阅读中的两种可能性:

  • randevuSil()行可能需要放在()中,而不是设置的一部分。
  • 设置按钮时,command=中应省略btnRandevuSil = Button(root,text="Randevuyu Sil",command=randevuSil)
    {{1}}
    否则,该功能将在设置过程中被调用(当尚未选择任何内容时),而不是单击按钮时。