首页 > 解决方案 > 您能否在使用模板化 SQL 查询时简化查询

问题描述

有没有办法简化这个语句以及访问元组中的某个元素。

l = (1,2,3,4)
sql = "INSERT INTO table1 VALUES ('%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE id = 3"
cursor.execute(sql, l)

变成更动态的东西 - 我以此为例,但我有一个大约 30 列的表,这样做似乎是多余的。当有重复键时,我还想更新一些字段。有没有办法索引到特定值,例如列表中的第三个并像这样显示它

l = (1,2,3,4)
sql = "INSERT INTO table1 VALUES ('%s') ON DUPLICATE KEY UPDATE id = {l[2]}"
cursor.execute(sql,l)

其中“l”将包含将插入表中的值

标签: pythonsqlmysql-workbench

解决方案


您可以根据元组的长度动态构造占位符字符串。

l = (1, 2, 3, 4)
placeholders = ",".join(['%s'] * len(l))
sql = f"INSERT INTO table1 VALUES ({placeholders}) ON DUPLICATE KEY UPDATE id = 3"
cursor.execute(sql, l)

顺便说一句,不要命名你的变量list,这将取代标准list()函数。


推荐阅读