我在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()
答案 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 ...")