Python和sqlite3:删除多行

时间:2018-09-24 12:13:03

标签: 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,))

我尝试将列表转换为元组,结果相同。有什么想法应该使用正确的语法吗?

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

2 个答案:

答案 0 :(得分:1)

如果您需要将多个元素自动解压缩到一个SQL语句中,则不能仅将其作为列表传递-您必须在语句中实际考虑位置参数(即,添加与元素数量一样多的//clearForm: true // clear all form fields after successful submit //resetForm: true // reset the form after successful submit 打开包装)。像这样:

?

请记住,这可能不一定比通过以下方式发出多个语句更有效:

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)

这一切都取决于查询缓冲,您的表关系等。

答案 1 :(得分:-1)

cursor.execute(“从ID为IN(%s)的行中删除;”,','.join(idsList));