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()
O método acima alterna o valor booleano na coluna status
de um dado item_id
. No entanto, item_id
às vezes pode ser plural, ou seja, pode conter mais de um valor, sobre o qual não tenho controle.
Como devo reescrever o sqlite3 doc-string para alternar às vezes um e às vezes mais de um item_id
? Além de mudar item_id: str
para item_id: list
, como escrevo os comandos SQLite para aplicar a CASE
instrução a uma lista de ids de itens? Agradeço antecipadamente.
O método abaixo fará o que eu quero. No entanto, não é uma abordagem SQLITE pura. Gostaria de saber os comandos SQL para atingir o abaixo.
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()
(Responder assumindo que
item_id
usa uma vírgula (,
) para delinear entre distintositem_ids
para os quais esta consulta deve ser executada.)Crie um
List[Tuple]
deitem_id
s e usecur.executemany()
:Graças a @esqew , aprendi que:
item_ids
tem que ser uma lista de tuplas onde cada tupla contém umstr
elemento, por exemploitem_ids = [("A",), ("B",), ("C",)]
..executemany()
para replicar o que o loop for do python faria.Solução de trabalho:
e este método pode ser executado como: