zoukankan      html  css  js  c++  java
  • 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)的即不区分。

    参考:

    1. MySql 设置字段值区分大小写
    2. MySQL大小写敏感说明
  • 相关阅读:
    Flex皮肤制作流程
    AIR app自动更新的实现方式
    Adobe AIR迷你教程 使用自定义窗口以及对窗口的移动,缩放,关闭操作
    AIR数据处理的方法
    Flex中的注释方法
    Flex皮肤设计简单实例教程
    八个常用的AS3开源类库
    as3 如何判断同时按下两个键
    struts2中动态方法调用
    Struts2.3笔记
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/masteringdm_ch3_pymysql_error.html
Copyright © 2011-2022 走看看