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

标签 python mysql mysql-python

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

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

现在我有

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)

关于python - 是否可以创建一个接受 python-mysql 中变量列表的查询命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438478/

相关文章:

python - 如何在 Django 模型中轻松创建计算字段?

mysql - SQL 查询 - 以下是如何工作的?

python - 使用 mysql 写入表时如何处理 Broken Piper 错误?

python - 添加新数据时无法从 mysql 数据库中获取 python 中的新数据

python - 来自字典列表的字典的数据框?

python - 在 Python 中将字符串拆分为字典

python sqlite 将行添加到 sql 数据库,其中行作为字典给出

PHP/SQL - 查询数组加载时间

c# - 远程mysql在循环中插入表非常慢

Python/MySQL : Select data in a for loop