pymysql.err.IntegrityError: (1062, Duplicate entry 'roxml-ROXML' for key 'PRIMARY')
在《Python數(shù)據(jù)挖掘-概念、方法與實(shí)踐》一書(shū)的第3章實(shí)體匹配中,如果一路按照作者的代碼及SQL語(yǔ)句進(jìn)行配置運(yùn)行的話,會(huì)出現(xiàn)如題目所示的錯(cuò)誤。根據(jù)python腳本的執(zhí)行錯(cuò)誤提示顯示,錯(cuò)誤發(fā)生在腳本中的第一個(gè)INSERT INTO語(yǔ)句中。
其實(shí)并不是到插入roxml時(shí)候才會(huì)報(bào)錯(cuò),而是在前面插入optionparser的時(shí)候就已經(jīng)報(bào)錯(cuò)了。這個(gè)錯(cuò)誤意思是代碼試圖在表中主鍵列被插入兩個(gè)重復(fù)值。這個(gè)問(wèn)題耗費(fèi)了我三個(gè)小時(shí),才最終把它解決。
書(shū)中的第一個(gè)INSERT語(yǔ)句目的是要把具有相同URL的項(xiàng)目的項(xiàng)目名稱(chēng)插入到book_entity_matches表中,在來(lái)自RF和RG的兩個(gè)網(wǎng)站的項(xiàng)目里面,有一些項(xiàng)目,它們的名字是僅有大小寫(xiě)的區(qū)別的,如下:
上兩圖中分別是從RF和RG表中查詢出來(lái)的結(jié)果,可以看到,的確是存在項(xiàng)目名稱(chēng)只有大小寫(xiě)區(qū)別的項(xiàng)目。但由于MySQL默認(rèn)它的VARCHAR字段是不區(qū)分大小寫(xiě)的,所以在執(zhí)行INSERT INTO語(yǔ)句當(dāng)嘗試插入如上圖所示的兩個(gè)相同的(只有大小寫(xiě)區(qū)別)項(xiàng)目名稱(chēng)時(shí),就出現(xiàn)了錯(cuò)誤!
解決方法之一,就是把這兩個(gè)字段類(lèi)型更改為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;其它的方法有:在創(chuàng)建表時(shí)指定字段屬性為BINARY,或者在創(chuàng)建表時(shí)指定編碼類(lèi)型,類(lèi)型后綴為cs(如utf8_general_cs)的即是區(qū)分大小寫(xiě),為ci(如utf8_general_ci)的即不區(qū)分。
參考:
轉(zhuǎn)載于:https://www.cnblogs.com/wuzhiblog/p/masteringdm_ch3_pymysql_error.html
總結(jié)
以上是生活随笔為你收集整理的pymysql.err.IntegrityError: (1062, Duplicate entry 'roxml-ROXML' for key 'PRIMARY')的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 洛谷 P3157 [CQOI2011]动
- 下一篇: luoguP1354房间最短路问题