pymysql.err.IntegrityError: (1062, Duplicate entry 'roxml-ROXML' for key 'PRIMARY')
在《Python數據挖掘-概念、方法與實踐》一書的第3章實體匹配中,如果一路按照作者的代碼及SQL語句進行配置運行的話,會出現如題目所示的錯誤。根據python腳本的執行錯誤提示顯示,錯誤發生在腳本中的第一個INSERT INTO語句中。
其實并不是到插入roxml時候才會報錯,而是在前面插入optionparser的時候就已經報錯了。這個錯誤意思是代碼試圖在表中主鍵列被插入兩個重復值。這個問題耗費了我三個小時,才最終把它解決。
書中的第一個INSERT語句目的是要把具有相同URL的項目的項目名稱插入到book_entity_matches表中,在來自RF和RG的兩個網站的項目里面,有一些項目,它們的名字是僅有大小寫的區別的,如下:
上兩圖中分別是從RF和RG表中查詢出來的結果,可以看到,的確是存在項目名稱只有大小寫區別的項目。但由于MySQL默認它的VARCHAR字段是不區分大小寫的,所以在執行INSERT INTO語句當嘗試插入如上圖所示的兩個相同的(只有大小寫區別)項目名稱時,就出現了錯誤!
解決方法之一,就是把這兩個字段類型更改為BINARY:
ALTER TABLE book_entity_matches MODIFY COLUMN rg_project_name VARCHAR(100) BINARY NOT NULL; ALTER TABLE book_entity_matches MODIFY COLUMN rf_project_name VARCHAR(100) BINARY NOT NULL;其它的方法有:在創建表時指定字段屬性為BINARY,或者在創建表時指定編碼類型,類型后綴為cs(如utf8_general_cs)的即是區分大小寫,為ci(如utf8_general_ci)的即不區分。
參考:
轉載于:https://www.cnblogs.com/wuzhiblog/p/masteringdm_ch3_pymysql_error.html
總結
以上是生活随笔為你收集整理的pymysql.err.IntegrityError: (1062, Duplicate entry 'roxml-ROXML' for key 'PRIMARY')的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷 P3157 [CQOI2011]动
- 下一篇: [py]access日志入mysql-通