首页 > 解决方案 > 如何在捕获其他异常 Python 3 时捕获 MySql 插入异常:“1062 (23000): Duplicate entry”?

问题描述

我正在尝试捕获并计算重复条目异常:

1062 (23000): Duplicate entry '' for key 'tabale.item_UNIQUE'

这是将生成重复项异常的代码:

stmt='INSERT INTO table.items(item) VALUES("iteratorI");'
    try:
        mc.execute(stmt)
        conn.commit()
    except pymysql.IntegrityError as e:
        duplicateCounter=duplicateCounter+1
    except Exception as ee:
        otherErrors=otherErrors+1

我希望能够分别计算重复的项目条目异常以保持其他异常的计数。

我想确保我计算的异常是关于重复条目而不是别的。另一个问题是当前 duplicateCounter 最终为零,尽管我得到了至少 10 1062 个异常,这些异常被计入 otherErrors

标签: pythonmysqlpython-3.xexception

解决方案


你还没有真正说明你的担忧是什么。您是否担心pymysql.IntegrityError异常可能是由重复键错误以外的其他原因引起的?如果这是问题所在,您可以检查与异常关联的错误代码是否为 1062 (DUP_ENTRY),如下所示:

stmt = 'INSERT INTO table.items(item) VALUES("iteratorI");'
try:
    mc.execute(stmt)
    conn.commit()
except pymysql.IntegrityError as e:
    if e.args[0] == 1062:
        duplicateCounter += 1
except Exception as ee:
    otherErrors += 1

如果您不想对 value 进行硬编码1062,您可以...

from pymysql.constants.ER import DUP_ENTRY

...然后与e.args[0]比较DUP_ENTRY。但是您随后将用一种编码依赖项替换另一种编码依赖项。


推荐阅读