2016-03-10 86 views
0

我想要做下面的SQL語句:插入到MySQL使用字典

INSERT INTO myTable (name, year) VALUES ("David", 2016) 

有沒有一種簡單的方法使用字典上面做INSERT

d = { 
    "name": "David", 
    "year": 2016 
} 

也許是這樣的:

cursor.execute('INSERT INTO myTable (%s) VALUES (%s)', (d.keys(), d.values()) 

甚至:

cursor.execute('INSERT INTO myTable %s', (d.items(),)) 
+0

可能的重複[對SQL INSERT語句使用Python字典](http://stackoverflow.com/questions/9336270/using-a-python-dict-for-a-sql -insert-statement) – Selcuk

+0

你需要在最後一個例子中使用'OrderedDict',但如果你這樣做了,它會起作用。 –

+0

@BobDylan能否請您舉一個例子說明這將如何作爲答案,我會接受嗎? – David542

回答

1

假設mysql-connector(但在大多數SQL/Python庫中都是如此),遊標需要一個帶有值(用於正確參數化)的元組。字典固有地不被排序,因此您需要使用有序字典來使用問題中的第二個示例,並確保鍵與表列/字段的順序相同。例如:

from collections import OrderedDict 

d = OrderedDict([("name", "David"), ("year", 2016)]) 

values_tuple = tuple([v for v in d.values()]) 
q = r'INSERT INTO myTable (%s' 
for i in range(len(values_tuple)-1): # I added first one above so -1 
    q += r', %s' 
q += ')' 

cursor.execute(q, values_tuple)