2015-09-02 64 views
-1

我試圖找出什麼錯在下面的查詢,但未能如願,請告訴我錯在我下面的查詢

connect.execute("""INSERT INTO dummy('disk_list_disk_serial_id','disk_list_disk_size','disk_list_service_vm_id','disk_list_disk_id','disk_list_storage_tier','disk_list_statfs_disk_size','storage_pool_id') VALUES ('%s','%s','%s','%s','%s','%s','%s') """, (disk_serial_id,disk_size,service_vm_id,entity_id,storage_tier,statfs_disk_size,disk_storage_id)) 

當我執行我得到一個錯誤

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''disk_list_disk_serial_id','disk_list_disk_size','disk_list_service_vm_id','disk' at line 1") 

我檢查service_vm_id後,但無法找到任何錯誤。請幫我解釋爲什麼我無法運行它。

+1

表或列名稱沒有單引號.. –

回答

0

你不應該引用字段名。

此外,你不應該佔位符值。 DB API在插入實際值時會爲你做這些工作,具體取決於它們是否是字符串。

connect.execute("""INSERT INTO dummy (disk_list_disk_serial_id,disk_list_disk_size,disk_list_service_vm_id, ...) VALUES (%s,%s,%s,%s,%s,%s,%s) """, (...)) 
0

總是一個更好的方法是使用一個變量來創建一個長/複雜的查詢。 這將是更好的可讀性

query = """ 
INSERT INTO dummy(disk_list_disk_serial_id,disk_list_disk_size,disk_list_service_vm_id,disk_list_disk_id,disk_list_storage_tier,disk_list_statfs_disk_size,storage_pool_id) VALUES ('%s','%s','%s','%s','%s','%s','%s') 
""" % (disk_serial_id,disk_size,service_vm_id,entity_id,storage_tier,statfs_disk_size,disk_storage_id) 
connect.execute(query) 

你也不會需要報價%s如果列類型爲int。我希望這有助於

+1

這不是問題的答案。 –

+0

剛剛編輯。我想現在的答案是可用的 – Shrey

0

嗯......你正確看到您的查詢,你已經與它沒有更多的列名,而一個字符串文字引述使用'列名

查詢

INSERT INTO dummy('disk_list_disk_serial_id', ... 

應該

INSERT INTO dummy(disk_list_disk_serial_id, .... 
0

您不需要圍繞列名引號。

編輯:我沒有看看標籤,並對特定於sqlite的語法發表了評論,感謝Daniel Roseman指出了這一點。這實際上是在mySQL中進行參數替換的正確方法。

+0

這是MySQL,而不是sqlite。 –

+0

@DanielRoseman感謝您指出這一點,我從我的帖子中刪除了錯誤的評論。 –