我在从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
一切正常,没有错误,但删除功能不起作用!
有没有人有想法?
答案 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)