如何从表中删除记录?

时间:2010-10-20 12:07:15

标签: python python-3.x sqlite

我在从SQLite3数据库中删除记录时遇到问题:

conn = sqlite3.connect('databaza.db')
c = conn.cursor()
data3 = str(input('Please enter name: '))
mydata = c.execute('DELETE FROM Zoznam WHERE Name=?', (data3,))
conn.commit()
c.close

一切正常,没有错误,但删除功能不起作用!

有没有人有想法?

6 个答案:

答案 0 :(得分:16)

parameterized查询的正确语法是:

mydata = c.execute("DELETE FROM Zoznam WHERE Name=?", (data3,))

确保参数使用逗号,使其成为python元组。

这将有助于防止在传入格式化字符串时可能出现的SQL注入。有关SQL注入的更多信息here

相关帖子here

答案 1 :(得分:1)

尝试:

mydata = c.execute('DELETE FROM Zoznam WHERE Name = (?)', (data3))

没有','而且'?'介于'()'

之间

答案 2 :(得分:0)

我参加派对有点晚了但是如果你谷歌搜索“python sqlite delete row”这是第一件事,我遇到的问题是我的sqlite DB没有得到删除的东西。 我在Debian Jessie上使用Python 2.7。

以前,当我编写用于在sqlite数据库中添加和检索信息的Python代码时,我已经根据需要编写了具有正确大小写的命令,并且它工作正常。

curs.execute("SELECT example_column1 FROM example_table WHERE example_column2=(?)", (Variable,))

...然而

curs.execute("DELETE FROM example_table WHERE example_column1=(?)", (Variable,)):

由于某种原因,这不适用于DELETE命令。在sqlite尊重发送的命令之前,我必须以小写的形式发送该命令。

conn=sqlite3.connect('example.db')
curs=conn.cursor()
curs.execute("delete from example_table where example_column=(?)", (Variable,))
conn.commit()
conn.close()

我不知道为什么。 我尝试了所有前面提到的方法,但是以小写字母发送的命令是我能让它工作的唯一方法。 希望这有助于任何挣扎的新手进入Python和sqlite。

答案 3 :(得分:-2)

我建议你先为查询创建一个字符串,然后执行它。例如:

query = "delete from zoznam where name = '%s' " % data3
c.execute(query)
conn.commit() 

答案 4 :(得分:-3)

检查文件权限。

除此之外,我更喜欢标记化的方法:

mydata = c.execute("DELETE FROM Zoznam WHERE Name='%s'" % data3)

答案 5 :(得分:-7)

感谢所有试图提供帮助的人。正确的代码是:

conn = sqlite3.connect('databaza.db')
c = conn.cursor()
conn.text_factory = str    
data3 = str(input('Please enter name: '))
query = "DELETE FROM Zoznam WHERE Name = '%s';" % data3.strip()
print(query)
mydata = c.execute(query)