这是使用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)
并且只使用原始字符串编写查询时间,但感觉就像一个黑客。
有没有一种首选的方式来做这样的事情?这可能是一个更广泛的问题,一般在查询中使用占位符,但我不确定。
答案 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)