如何从表中删除记录?

18 投票
7 回答
65553 浏览
提问于 2025-04-16 05:47

我在从我的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

一切看起来都没问题,没有错误提示,但删除功能就是不管用!

有没有人知道怎么回事?

7 个回答

3

我来得有点晚,不过如果你在谷歌上搜索“python sqlite 删除行”,你会发现这篇文章是第一个出现的。我之前也遇到过同样的问题,就是我的sqlite数据库里的数据没有被删除。

我在Debian Jessie上使用的是Python 2.7。之前我写Python代码来添加和获取sqlite数据库里的信息时,命令的大小写我都写对了,结果一切正常。

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时遇到困难的新手。

17

一个正确的参数化查询的写法是:

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

确保参数使用逗号,这样它就变成了一个Python的元组。

这样做可以帮助防止SQL注入攻击,这种攻击在传入格式化字符串时可能会发生。关于SQL注入的更多信息可以在这里找到

相关帖子可以在这里查看

-8

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

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)

撰写回答