码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2017-12-24 20:07:39      阅读:2869      评论:0      收藏:0      [点我收藏+]

标签: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'")

标签:int   创建表   gpo   img   bubuko   name   ica   大小写   arc   

原文地址:http://www.cnblogs.com/wuzhiblog/p/masteringdm_ch3_pymysql_error.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!