1
我有非常大的字典,我想插入到MySQL表中。字典鍵是表中的列名。我構建我這樣的查詢,截至目前:帶有字符串的查詢格式
bigd = {'k1':'v1', 'k2':10}
cols = str(bigd.keys()).strip('[]')
vals = str(bigd.values()).strip('[]')
query = "INSERT INTO table ({}) values ({})".format(cols,vals)
print query
輸出:
"INSERT INTO table ('k2', 'k1') values (10, 'v1')"
而且這部作品在Python2.7
但是在Python 3.6,如果我用字符串文字像這樣:
query = f"INSERT INTO table ({cols}) values ({vals})"
print(query)
它打印此:
"INSERT INTO table (dict_keys(['k1', 'k2'])) values (dict_values(['v1', 10]))"
任何提示?
你不應該用字符串格式**來形成查詢字符串**,它會讓你接受注入攻擊。閱讀您正在使用的數據庫引擎的文檔,該文檔告訴您如何通過在查詢中放置佔位符並讓它們執行格式化來實現。 – jonrsharpe
@jonrsharpe感謝您的提示。將切換到佔位符。但有沒有辦法擺脫這些「dict_keys」的一些其他類似的應用程序,這將維護引號周圍的字符串和整數沒有引號。 – MYGz
問題在於你是在以一種天真的方式開始處理列表字面值的字符串。 '','。join(map(repr,whatever))'更整潔,並繼續工作。 – jonrsharpe