pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY'")

來源:互聯網
上載者:User

標籤:int   建立表   gpo   img   bubuko   name   ica   大小寫   arc   

在《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)的即不區分。

參考:

  1. MySql 設定欄位值區分大小寫
  2. MySQL大小寫敏感說明

pymysql.err.IntegrityError: (1062, "Duplicate entry 'roxml-ROXML' for key 'PRIMARY'")

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.