如何在python/mysq中替换列表

2024-04-26 10:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这是在使用pythonmysql.connector接口来自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)每次用一个原始字符串编写一个查询,但感觉像是一个黑客。你知道吗

有没有更好的方法来做这样的事情?一般来说,在查询中使用占位符可能是一个更广泛的问题,但我不确定。你知道吗


Tags: inid元素列表connectormysqlupdatewhere
1条回答
网友
1楼 · 发布于 2024-04-26 10:20:50

如果查询需要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)

相关问题 更多 >