2012-05-10 197 views
1

我有一個列表的列表:myList = [[123, 345], [23, 45], [54, 34]]如何使用MySQL executemany更新Python列表中的列表?

我想要做這樣的事情:

cursor.executemany("update tablename set flag = 'yes' where id = %s and officeid = %s", myList) 

我搜索,發現這個無解。如果它永遠不會實現,那麼什麼是更好的更新語句,而不必遍歷列表中的所有元素?

回答

1
myTuples = tuple(map(tuple, myList)) 

cursor.execute("update tablename set flag = 'yes' \ 
where (id, officeid) in " + str(myTuples)) 
+0

它說:TypeError:executemany()只需要3個參數(給出2),但執行()工作得很好! – ThinkCode

+0

謝謝 - 修改了上面的解決方案。 :) –

+0

如果flag是元組中的值而不是常量'yes',那麼我們將如何修改?我們可以這樣做:cursor.execute(「更新表名集標誌=%s \ 其中(id,officeid)在」+ str(myTuples))myTuple可能是('nope',21,32)..任何指針?謝謝! – ThinkCode

1
update tablename set flag = 'yes' 
WHERE (id,officeid) IN ((123,345), (23,45), (54,34)); 
+0

我可以知道Python的等價物列表的列表? – ThinkCode

+0

@ThinkCode:對不起,我對Python不熟悉。該查詢適用於Mysql,但我不知道如何在Python中傳遞這些參數。 – a1ex07

+1

列表列表的Python等效項是列表的列表。例如。問題中的myList是列表的列表。如果你把它變成一個元組的元組,它將是'((123,345),(23,45),(54,34))',並且用「%s」進行插入會按照MySQL解釋器期望的方式工作,儘管它看起來像是一個SQL注入場所,如果這些項來自用戶輸入。 – 9000