2013-04-20 47 views
0

我對python和mysql也很陌生,目前正試圖「將數據插入到表中,我在我的機器上的WAMP服務器上設置了事件。我需要存儲到數據庫中的數據存儲在我的python程序中的各種數組中,並且這些數據都被正確存儲了。我能夠通過python程序成功連接到本地數據庫,但是我的mysql語法有問題當我寫入數據庫時​​插入數據庫時​​,Python腳本中的Mysql語法錯誤

我希望有人能夠幫助我 - 我基本上已經設置了一個for循環來將存儲在數組中的元素寫入我在本地機器上設置的數據庫(localhost) 。

length = range(len(event_ids)) 
imageid = 0 

for z in length: 
    cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z])) 
    db.commit() 

cursor.close() 
db.close() 

我收到的錯誤包括以下信息。這裏顯示的元素是從我已經成功指定的數組中讀取的「@ 2013042020,Prodijig Dublin,2013-04-20 20:00:00,2013-04-20 23:59:00,V0-001-0 :」。我只是不知道爲什麼我收到SQL語法錯誤。我真的很感激,如果任何人都可以泄露我可能出錯的信息。

錯誤:

cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z])) 
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 202, in execute 
self.errorhandler(self, exc, value) 
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler 
raise errorclass, errorvalue 
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 '@2013042020, Prodijig Dublin, 2013-04-20 20:00:00, 2013-04-20 23:59:00, V0-001-0' at line 1") 

編輯:我有下面的討論不過我現在收到這個代碼後修復「IndexError:列表索引超出範圍」的錯誤由於某種原因,我目前還不能解釋和我的python程序在35次迭代後終止(當它迭代並向數據庫插入元素50次時)。如果有人能夠幫助我,我會非常感激。然而,這可能與此聲明無關 - 我現在不確定。

我固定的MySQL插入到代碼反正是:

cur.execute('INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)' , (event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z])) 

回答

1

你需要周圍的人所插入的所有字符串值引號:

cur.execute("""INSERT INTO events (event_id, event_title, start_time, stop_time, venue_id, image_id, all_day, venue_name) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'""" %(event_ids[z], event_names1[z], start_times1[z], stop_times1[z], venue_ids1[z], imageid, all_day_list1[z], venue_names1[z])) 
+0

嗨@Barmar我已經試過這條線的代碼並收到以下錯誤: ProgrammingError:(1064,「您的SQL語法有錯誤;請檢查與您的MySQL服務器版本對應的手冊,以在第一行使用正確的語法」) – Karen 2013-04-20 19:07:00

+0

可以與我寫入數據庫的字符串中的「'」有什麼關係?我想不出別的什麼!儘管謝謝你的回答! – Karen 2013-04-20 19:07:49

+0

mysql查詢中允許使用單引號。你能打印出查詢字符串嗎? – Barmar 2013-04-20 19:26:40

0

您正在運行的查詢是這樣的:

INSERT INTO events (
    event_id, 
    event_title, 
    start_time, 
    stop_time, 
    venue_id, 
    image_id, 
    all_day, 
    venue_name) 
VALUES (
    @2013042020, 
    Prodijig Dublin, 
    2013-04-20 20:00:00, 
    2013-04-20 23:59:00, 
    V0-001-0 (rest of query is missing) 

MySQL是抱怨@2013042020不是有效的值。我假設event_id是一個整數列,所以該值不應包含@符號。一旦你解決這個問題,你會發現MySQL有更多的抱怨查詢:

Prodijig Dublin  should be a string: 'Prodijig Dublin' 
2013-04-20 20:00:00 should be a date : #2013-04-20 20:00:00# (quotes also work) 
2013-04-20 23:59:00 should be a date : #2013-04-20 23:59:00# 
V0-001-0   should be as tring: 'V-0-001-0'