簡體   English   中英

是否有可能創建一個查詢命令來接收python-mysql中的變量列表

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

我試圖做一種利用multiquery executemany在MySQLdb的圖書館。 搜索后,我發現必須創建一個使用INSERT INTO以及ON 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM