Python和sqlite3:删除多行

Python和sqlite3:删除多行,python,sqlite,Python,Sqlite,我需要使用以下SQL语句从sqlite3表中删除多行: DELETE FROM table WHERE id IN (23, 19, 35, 16, 12, 78) 我的问题是用Python编码,ID在列表中。以下操作不起作用,产生语法错误: cursor.execute('DELETE FROM table WHERE id IN ?', (id_list,)) 我尝试将列表转换为元组,结果相同。你知道这个的正确语法是什么吗 编辑: 当然,我不希望遍历列表,一行一行地删除,因为这样做效率很

我需要使用以下SQL语句从sqlite3表中删除多行:

DELETE FROM table WHERE id IN (23, 19, 35, 16, 12, 78)
我的问题是用Python编码,ID在列表中。以下操作不起作用,产生语法错误:

cursor.execute('DELETE FROM table WHERE id IN ?', (id_list,))
我尝试将列表转换为元组,结果相同。你知道这个的正确语法是什么吗

编辑: 当然,我不希望遍历列表,一行一行地删除,因为这样做效率很低


另外,管理人员已经指出了这个问题与其他问题的相似之处。然而,这个问题是关于DML语句delete的,而那个问题是关于DATA statament select的。这种区别可能看起来很肤浅,但实际上很关键,因为SQLITE3允许ExecuteMay命令与DML语句一起使用,而不允许与data语句一起使用。因此,这两个问题的答案非常不同。

如果需要将多个元素自动解压到SQL语句中,您不能将其作为列表传递-您必须实际考虑语句中的位置参数,即添加尽可能多的参数?因为有一些元素需要解包。比如:

id_list = (23, 19, 35, 16, 12, 78)
query = "DELETE FROM table WHERE id IN ({})".format(", ".join("?" * len(id_list)))
# DELETE FROM table WHERE id IN (?, ?, ?, ?, ?, ?)
cursor.execute(query, id_list)
请记住,这可能并不一定比通过以下方式发布多条语句更有效:

cursor.executemany("DELETE FROM table WHERE id = ?", id_list)

这完全取决于查询缓冲、表关系等。

cursor.executeElete,从ID位于%s;,,'中的行执行。联合名单

不,你不应该这样做。字符串格式化是一种SQL注入风险。