如何替换python / mysql中的列表

时间:2014-09-11 11:51:17

标签: python mysql

这是使用MySQL的python mysql.connector。

我想写一个更新查询,其中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 个答案:

答案 0 :(得分: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)