2014-09-11 80 views
0

這是使用MySQL的python mysql.connector。如何在python/mysql中替換列表

我想編寫一個更新查詢,其中id在列表中,例如,

UPDATE tbl SET thing=1 WHERE id IN (1,2,3,4,5); 

如果我是佔位單一的元素,我會寫:

qry = ("UPDATE tbl SET thing=1 WHERE id=%s") 
cur.execute (qry,(var,)) 

我不知道我的名單有多長,每次所以我不能用%s, %s, %s ...n等我可以",".join(list)去並且每次只用原始字符串寫一個查詢,但感覺像是一個黑客。

有沒有一種喜歡這樣的事情的首選方法?這可能是關於在一般查詢中使用佔位符的更廣泛的問題,但我不確定。

回答

1

如果查詢需要IN然後用IN,沒有必要與=來取代它,例如:

mysql> select * from foo; 
+------+-------+ 
| id | thing | 
+------+-------+ 
| 1 |  5 | 
| 2 |  5 | 
| 3 |  5 | 
| 4 |  5 | 
| 5 |  5 | 
+------+-------+ 
5 rows in set (0.00 sec) 

>>> cur = conn.cursor() 
>>> my_ids 
[1, 3, 5] 
>>> sql 
'UPDATE foo SET thing=1 WHERE id IN %s' 
>>> cur.execute(sql, (my_ids,)) 
3L 
>>> conn.commit() 

然後,所有的行被更新:

mysql> select * from foo; 
+------+-------+ 
| id | thing | 
+------+-------+ 
| 1 |  1 | 
| 2 |  5 | 
| 3 |  1 | 
| 4 |  5 | 
| 5 |  1 | 
+------+-------+ 
5 rows in set (0.00 sec)