2012-07-11 87 views
0

當我在Python中運行我的程序時出現此錯誤。 這裏是我的數據庫的表:Python MySQLdb:鍵1的重複條目'2147483647'

Field   Type   Collation  Null  Key  Default  
articleCode varchar(25) latin1_swedish_ci NO   UNI             
dateReceived datetime   NULL   NO   MUL  0000-00-00 00:00:00     
s100RSD  datetime   NULL   YES    0000-00-00 00:00:00   
remarks  longtext  latin1_swedish_ci YES       

,並簡化我的程序的問題,我會隔離,使一個錯誤,這裏的程序的一部分:

import MySQLdb 

def main(): 
    dateReceived = '2011-10-07 01:06:30' 
    articleCode = 'name' 
    s100rsd = '2011-10-07 01:06:30' 
    remark_text = 'This is a remark' 
    db = MySQLdb.connect('server', 'user', 'passwd', 'table_name', port) 
    cur = db.cursor() 
    db_query = cur.execute("INSERT INTO tblS100CurrentListing (articleCode, dateReceived, s100RSD, remarks) VALUES ('articleCode', 'dateReceived', 's100rsd', 'remark_text')") 
    cur.close() 
    db.close() 

if __name__ == '__main__': 
    main() 

這裏的錯誤我得到:_mysql_exceptions.IntegrityError:(1062,「關鍵1的重複條目'2147483647'」)

感謝您的幫助!

+0

我應該提供完整的數據庫模式。 – 2012-07-11 06:05:21

回答

2

您似乎將常量插入到數據庫中,而不是您的實際值。相反,嘗試類似的東西;現場「articleCode」防止MySQL的

db_query = cur.execute("INSERT INTO tblS100CurrentListing " + 
    "(articleCode, dateReceived, s100RSD, remarks) VALUES (%s, %s, %s, %s)", 
    (articleCode, dateReceived, s100rsd, remark_text)) 
+0

好吧我想,這是我正在尋找的那個。謝謝,我會嘗試修改我的查詢,並再次在此更新。謝謝! – neo 2012-07-11 06:11:32

+0

我嘗試了你的建議,但我仍然得到「重複項」2147483647「關鍵1」 – neo 2012-07-11 06:25:09

+0

Joachim,我現在弄清楚是什麼問題,每次運行程序時都有重複的主鍵。我現在的問題是,我的主鍵被設置爲auto_increment,但每次插入一個新行時,id集總是'2147483647',這就是爲什麼我得到「複製條目'2147483647'關鍵1」。我如何處理這一個?謝謝! – neo 2012-07-11 06:54:12

1

唯一鍵有與相同內容的這列兩項紀錄。看起來你已經在第一個程序運行中插入了一個。

刪除以前插入的記錄與articleCode =「名」或刪除articleCode場UNIQUE KEY或嘗試插入articleCode的不同價值。

希望這會有所幫助!

+0

感謝您的幫助!它也有幫助!我現在將嘗試重新編程我的代碼。 – neo 2012-07-11 06:12:24

0

按照其他答案中所述更正代碼後,應修改表以重置其auto_increment計數器。

ALTER TABLE tblS100CurrentListing auto_increment=1 

應將計數器重置爲最低可能值。

需要從表格中刪除或修復錯誤的值;否則更改不會有任何影響。

此外,是否真的需要插入一個設置爲auto_increment的字段?或者這是恢復過程的一部分?否則,這兩件事情是多餘的:要麼自動獲取數據,要麼插入它們。兩者都可以(如所見)導致衝突。

2

發生這種情況是因爲密鑰的限制。如果是INTEGER,則爲2147483647。您可以選擇像BIGINT或比INTEGER大的東西。 2147483647之後的所有記錄將被嘗試寫入值2147483647.所以這就是爲什麼你有這個問題。用BIGINT/LARGEINT或類似的東西改變它。

希望它有幫助。