如何从Tkinter列表框中的选定行中获取值并从sqlite3中删除

时间:2013-11-03 05:44:55

标签: python sqlite tkinter

我在Tkinter的列表框中有一行条目,我要做的是单击列表框中的一行,然后单击删除按钮并从sqlite3数据库中删除这一行值。以下是我的代码中获取列表框中所选行的部分

person = self.listbox1.curselection()

稍后,我的代码部分是从数据库“people”(这是我的表名)中删除。

list=c.execute("DELETE FROM people WHERE name =?", (person,))

问题是,我不知道该放入什么内容,你可以看到我尝试做什么,但我得到“OperationalError:no such column:name”

此外,列表框中的每一行都包含姓名,年龄,电话号码

conn = sqlite3.connect('phonebook1.db')
            c = conn.cursor()
            conn.execute('''
                CREATE TABLE IF NOT EXISTS people(name TEXT primary key,
            age TEXT, phone TEXT)''')
            c.execute("insert into people values (?, ?, ?)", (item, item2, item3))
            conn.commit()

1 个答案:

答案 0 :(得分:1)

我在How to delete a row from a listbox in TKinter and SQLite3

上给出了完整代码的答案

如果您对该代码有疑问,则应继续讨论而不是创建新问题。


"OperationalError: no such column: name"

您可能创建了不含列people的表name,现在您必须删除'phonebook1.db'以使用列people重新创建表name

或者您必须使用SQL查询ALTER TABLE ...将列name添加到现有表。


修改

顺便说一下:

查询"DELETE FROM people WHERE name =?"需要一个元素 - 名称 - 不是元组person 正确的:

c.execute("DELETE FROM people WHERE name =?", (person[0]))

查询"DELETE FROM ..."不返回任何内容,因此在下面的代码中,您没有获得列表

list = c.execute("DELETE FROM ...")