我需要使用以下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,))
我尝试将列表转换为元组,结果相同。有什么想法应该使用正确的语法吗?
编辑: 当然,我不希望遍历列表一一删除行,因为这样效率很低。
答案 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));