zoukankan      html  css  js  c++  java
  • pymysql.err.IntegrityError: (1062, “Duplicate entry ‘ ‘ for key ‘PRIMARY‘“)

     在python中用insert into写入mysql数据库时,可能会出现如题所示异常。

        当然,如何改是属于数据方面的知识,网上有很多,不在这里述说。

       本文要解决的是:如何在程序中获取该错误,并进行异常处理。

       一、捕获异常。
    常用方法:
    当然在程序调试过程中出现该异常,用肉眼来看就行了。在程序中就需要捕获该异常。参考Python3 MySQL 数据库连接 - PyMySQL 驱动中的代码:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
    LAST_NAME, AGE, SEX, INCOME)
    VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
    except:
    # 如果发生错误则回滚
    db.rollback()
    
    # 关闭数据库连接
    db.close()
    以上代码可以应付大多数程序场景。
    

      

    二、异常处理
    在捕获异常后,异常有很多种,只对感兴趣(或者说:能处理的)异常进行处理。比如如题所示的异常。一般情况下程序中遇到这种异常,可以忽略。于是以上代码就可以进行修改

    首先,为了能获取异常原因,就要把except:改为except Exception as err:

    其次,为了识别出是能处理的原因,可以使用正则表达式来匹配异常原因是感兴趣的,而不是别的原因。这中间有个问题:上句中err的类型是pymysql.err.IntegrityError对象。而正则表达式只能处理string类型,所以需要把pymysql.err.IntegrityError对象转变为string对象。幸运的是python有个很好用的函数str()。

    最后上改过后的代码

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
    LAST_NAME, AGE, SEX, INCOME)
    VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
    except Exception as err:
    #检查异常原因是否是感兴趣的
    result1 =re.search('Duplicate entry.*key.*PRIMARY', str(err))
    #如果是,什么都不用做
    #否则(也不知道是什么原因),那就回滚吧
    if(result1 ==None):
    # 如果发生错误则回滚
    db.rollback()
    
    # 关闭数据库连接
    db.close()
    

      

  • 相关阅读:
    面试总结进程、线程与多线程
    精妙算法收集一道有趣的腾讯笔试加分题
    反汇编分析寄存器状态
    远程桌面快捷键
    Js中 关于top、clientTop、scrollTop、offsetTop的用法
    JavaScript获取CSS属性
    oracle开启日志归档 (成功)
    eclipse插件开发帮助文档地址
    alter system修改oracle参数
    oracle分析统计表
  • 原文地址:https://www.cnblogs.com/zhenghuiwen/p/14638937.html
Copyright © 2011-2022 走看看