是否可以创建一个查询命令,该命令接受 python-mysql 中的变量列表

Is it possible to create a query command that takes in a list of variables in python-mysql

我正在尝试使用 MySQLDb 库中的 executemany 进行多查询。四处搜索后,我发现我必须创建一个使用 INSERT INTOON DUPLICATE KEY 而不是 UPDATE 的命令才能使用 executemany

到目前为止一切都很好,但是后来我 运行 遇到了一个问题,我无法有效地设置 SET 部分。我的 table 有大约 20 列(你是否想批评 table 的肥胖取决于你。到目前为止它对我有用)并且我想尽可能有效地形成命令字符串。

现在我有

update_query = """
               INSERT INTO `my_table` 
               ({all_columns}) VALUES({vals})
               ON DUPLICATE KEY SET <should-have-each-individual-column-set-to-value-here>
               """.format(all_columns=all_columns, vals=vals)

其中 all_columns 涵盖了所有列,而 vals 涵盖了一堆 %s,因为我稍后将使用 executemany

但是我不知道如何形成字符串的 SET 部分。我考虑过使用逗号分隔将它们分隔成列表中的元素,但我不确定是否可以迭代它们。

总的来说,这样做的目的是只调用一次数据库进行更新,这是我现在能想到的唯一方法。如果你有更好的想法,也请告诉我。

编辑:添加更多信息

all_columns 类似于 'id, id2, num1, num2'

vals 现在设置为 '%s, %s, %s, %s'

当然还有比 4 列更多的列

假设您有一组命令的元组列表:

listUpdate = [('f1', 'i'), ('f2', '2')]

setCommand = ', '.join([' %s = %s' % x for x in listUpdate])
all_columns = 'id, id2, num1, num2'
vals = '%s, %s, %s, %s'

update_query = """
               INSERT INTO `my_table`
               ({all_columns}) VALUES({vals})
               ON DUPLICATE KEY SET {set}
               """.format(all_columns=all_columns, vals=vals, set=setCommand)

print(update_query)