如何使用 MySQL executemany 更新 Python 中的列表列表?

Posted

技术标签:

【中文标题】如何使用 MySQL executemany 更新 Python 中的列表列表?【英文标题】:How to use MySQL executemany to update list of lists in Python? 【发布时间】:2012-05-19 06:29:48 【问题描述】:

我有一个列表列表:myList = [[123, 345], [23, 45], [54, 34]]

我想做这样的事情:

cursor.executemany("update tablename set flag = 'yes' where id = %s and officeid = %s", myList)

我搜索了这个并没有找到解决方案。如果永远不会实现,那么在不必循环遍历列表中的所有元素的情况下,有什么更好的更新语句?

【问题讨论】:

【参考方案1】:
myTuples = tuple(map(tuple, myList))

cursor.execute("update tablename set flag = 'yes' \
where (id, officeid) in " + str(myTuples))

【讨论】:

它说:TypeError: executemany() 正好需要 3 个参数(给定 2 个),但 execute() 工作得很好! 谢谢 - 修改了上面的解决方案。 :) 如果 flag 是元组中的值而不是常量“yes”,我们将如何修改它?我们可以这样做: cursor.execute("update tablename set flag = %s \ where (id, officeid) in " + str(myTuples)) 其中 myTuple 可能是 ('nope', 21, 32) .. 这里有什么指针吗?谢谢!【参考方案2】:
update tablename set flag = 'yes' 
WHERE (id,officeid) IN ((123,345), (23,45), (54,34));

【讨论】:

我可以知道列表列表的 Python 等效项吗? @ThinkCode:对不起,我不熟悉 Python。查询在mysql中有效,但是我不知道如何在Python中传递这些参数。 列表列表的 Python 等效项是列表列表。例如。问题中的myList 是一个列表列表。如果你把它变成一个元组的元组,它将是((123,345), (23,45), (54,34)),并且用“%s”插入它会按照 MySQL 解释器的预期工作,尽管如果项目来自用户输入,它看起来像是 SQL 注入的场所。

以上是关于如何使用 MySQL executemany 更新 Python 中的列表列表?的主要内容,如果未能解决你的问题,请参考以下文章

mycursor.executemany 更新未按预期工作

如何使用 executemany 将 Python 中的字典列表插入 MySQL

Python MySQL executemany的使用

使用 `executemany` 更新现有 SQLite3 数据库中的条目(使用 Python sqlite3)

Django:使用带有 executemany 和 MySQL 的自定义原始 SQL 插入

MySQLdb使用批量插入executemany方法插入mysql