gpt4 book ai didi

Python 和 sqlite3 : deleting multiple rows

转载 作者:行者123 更新时间:2023-12-04 13:21:11 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





select from sqlite table where rowid in list using python sqlite3 — DB-API 2.0

(3 个回答)


3年前关闭。




我需要使用 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,))

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

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

附注。管理员已指出此问题与 this 的相似之处.但是,这个问题是关于 DML 语句(删除),而那个是关于 DATA 语句(选择)的。差异可能看起来很表面,但实际上很关键,因为 SQLITE3 允许将 executemany 命令与 DML 语句一起使用,但不能与数据语句一起使用。因此,这两个问题的答案是非常不同的。

最佳答案

如果您需要自动将多个元素解包到 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)

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

关于Python 和 sqlite3 : deleting multiple rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479163/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com