2016-04-19 58 views
0

我在Python中執行一些MySQL語句時遇到了2個問題。首先我有一個日期列,我已經用YYYY-MM-DD格式(例如2016-03-15)手動插入了其他記錄。然而,格式化的問題在某處,我試圖使用strftime等格式的各種不同組合。MySQL Python日期和列表錯誤

我引用Inserting a Python datetime.datetime object into MySQL,但這沒有幫助。

import time 
formattedTime = datetime.datetime(3000, 12, 03) 
formattedTime = formattedTime.date().isoformat() 
a = 1 
b = 2 
c = 4 
cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %d, %d, %d, NULL, NULL, NULL, NULL, NULL, NULL, 'item1 item2 item3')" %(formattedTime, a, b, c)) 
cnx.commit() 

日期字段是我的主鍵。我得到的錯誤提示爲NULL(這是輸入NULL時的默認值)的NULL條目,所以我知道「formattedTime」和相應的「%s」失敗: mysql.connector.errors .IntegrityError:1062(23000):重複條目'0000-00-00',用於鍵'PRIMARY'

其次,我有一個列表listWords = list 。我在我的計劃執行過程中追加項目,最終我「」。加入(listWords)到列表轉換爲空間分隔的字符串,但是當我替換上面:

cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %d, %d, %d, NULL, NULL, NULL, NULL, NULL, NULL, %s)" %(formattedTime, a, b, c, listWords)) 

我得到的錯誤:

mysql.connector.errors.ProgrammingError:1064(42000):您的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第1行的'item1 item2 item 3'附近使用正確的語法。

任何幫助將不勝感激!

+0

我想你應該在你的情況 – Selcuk

回答

0

您不能對SQL查詢使用字符串插值。取而代之的是使用參數替換,對於MySQL,它始終使用%s,但是處理方式不同;並用逗號分隔值,而不是用%s代替。

cursor.execute("INSERT INTO nodeStatistics VALUES(%s, %s, %s, %s, NULL, NULL, NULL, NULL, NULL, NULL, 'item1 item2 item3')", (formattedTime, a, b, c)) 
+0

感謝丹,這工作完全我打算如何使用逗號',',而不是''%和解釋是更有價值 – reyyez