2014-09-11 74 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)