是否可以创建一个查询命令,该命令接受 python-mysql 中的变量列表
Is it possible to create a query command that takes in a list of variables in python-mysql
我正在尝试使用 MySQLDb 库中的 executemany
进行多查询。四处搜索后,我发现我必须创建一个使用 INSERT INTO
和 ON 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)
我正在尝试使用 MySQLDb 库中的 executemany
进行多查询。四处搜索后,我发现我必须创建一个使用 INSERT INTO
和 ON 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)