def toggle_status_of_item(self, item_id: str):
sql = """UPDATE table
SET status = CASE status
WHEN 0 THEN 1
ELSE 0 END
WHERE item_id = ?"""
self.cur.execute(sql, (item_id,))
self.con.commit()
上面的方法切换给定item_id
的列status
中的布尔值。然而,item_id
有时可以是复数,即它可能包含多个值,我无法控制这些值。
我应该如何重写sqlite3文档字符串来切换有时一个,有时多个item_id
?除了将item_id: str
更改为item_id: list
之外,如何编写SQLite命令以将CASE
语句应用于项目ID列表?先谢谢你了。
下面的方法会做我想要的。但是,它不是一个纯粹的SQLITE方法。我想知道下面的SQL命令的实现.
def toggle_status_of_item(self, item_ids: list):
sql = """UPDATE table
SET status = CASE status
WHEN 0 THEN 1
ELSE 0 END
WHERE item_id = ?"""
for id in item_ids:
self.cur.execute(sql, (id,))
self.con.commit()
2条答案
按热度按时间2uluyalo1#
(假设
item_id
使用逗号(,
)来区分应该运行此查询的不同item_ids
。)创建
item_id
s的List[Tuple]
,然后使用cur.executemany()
:qco9c6ql2#
感谢@esqew,我学到了:
item_ids
必须是元组的列表,其中每个元组包含str
元素,例如item_ids = [("A",), ("B",), ("C",)]
。1.我可以使用sqlite的
.executemany()
来复制python for循环的功能。工作溶液:
并且该方法可以被执行为: