2015-10-18 123 views
1

我想用後續腳本來填充我的數據庫,它根本不運行查詢,而是直接去除except和打印錯誤消息。任何人都可以有()稱爲insertGuest功能識別問題:使用python腳本填充數據庫

for i in range (100): 
    addGuest = "INSERT INTO hotel_guests VALUES (\"%d\", \"%s\"%s \"%s\")", (int(i), "Name"+str(i),"gender"+str(i)) 
    try: 
     mycursor.execute(addGuest) 
     conn.commit() 
     print ("10000 Guests Successfully Inserted") 
    except: 
     conn.rollback() 
     print ("An error occurred") 

我也想數據,尤其是名字是有意義的,但如果我可以得到隨機字符串,然後將只需要做。

感謝SQL 夏季

+1

你可以嘗試traceback'加上'你'except'所以你知道爲什麼它給你的錯誤。除此之外,這是一個「爲什麼不是我的代碼工作」的問題,這是脫離主題的SO。 – Leb

回答

2

字符值單引號,數字都沒有引用。正如您嘗試的Python字符串格式化,需要字符串和參數元組之間的「%」。所以,你會有這樣的事情,而不是:

addGuest = "INSERT INTO hotel_guests VALUES (%d, '%s', '%s')" % (int(i), "Name"+str(i),"gender"+str(i)) 

這就是說,你可能是str.format()和命名參數更好,爲了清楚。請參閱https://docs.python.org/2/library/string.html#format-string-syntax

您可能還想要改進來自您的except的錯誤報告。你可以將其替換爲:

except mdb.Error as e: 
     conn.rollback() 
     print "Error %d: %s" % (e.args[0],e.args[1]) 

(這是假設你導入MySQLdb的與import MySQLdb as mdb,否則相應的調整mdb名稱。)

+0

謝謝。我試過這個,但它仍然不採取查詢,而是運行錯誤語句。 – summerdaiz

+1

啊,我明白了。它至少應該生成有效的SQL,因此可能會有其他因素,例如遊標/連接的狀態或有關表的信息。至少,正如@leb所建議的那樣,您應該從「except」,追溯或至少一個錯誤描述中獲得更多信息。 –

+0

我結束了剛剛使用for循環,並拿出了嘗試/除了。我是編程新手,所以我會採取微小的工作步驟。另外顯然MySQLdb庫不適用於我的版本。 – summerdaiz