-1
我有一個與數據庫中的名稱和列相同的字典。我可以按原樣插入它,而不用重新編寫INSERT INTO
語句,並重新使用所有列名稱進行鍵入?是否可以使用pymysql插入字典?
UPDATE
的問題是關於pymysql
能力。您不需要編寫代碼,從字典中構建SQL
聲明。
我有一個與數據庫中的名稱和列相同的字典。我可以按原樣插入它,而不用重新編寫INSERT INTO
語句,並重新使用所有列名稱進行鍵入?是否可以使用pymysql插入字典?
UPDATE
的問題是關於pymysql
能力。您不需要編寫代碼,從字典中構建SQL
聲明。
PyMySQL和其他DB-API 2.0 adapter一樣;參數必須放置在SQL查詢中作爲位置或命名佔位符。如果你想避免直接命名列,你必須以編程方式生成佔位符。
當您使用%(name)s
參數語法時,PyMySQL支持使用參數字典執行查詢。要從字典中生成插入語句,您可以使用:
def escape_name(s):
"""Escape name to avoid SQL injection and keyword clashes.
Doubles embedded backticks, surrounds the whole in backticks.
Note: not security hardened, caveat emptor.
"""
return '`{}`'.format(s.replace('`', '``'))
names = list(dict_of_params)
cols = ', '.join(map(escape_name, names)) # assumes the keys are *valid column names*.
placeholders = ', '.join(['%({})s'.format(name) for name in names])
query = 'INSERT INTO TABLENAME ({}) VALUES ({})'.format(cols, params)
cursor.execute(query, dict_of_params)
爲什麼不在庫中完成? – Dims
@Dims:爲什麼它應該是?你不能總是假定你有正確的列插入。如果您省略了必填列,該怎麼辦 –
與我在SQL中省略必需的列相同 – Dims