如何在不抛出错误的情况下避免MySQL数据库中的重复条目

hnv*_*asa 4 python mysql mysql-python

我正在使用Python-MySQL(MySQLdb)库将值插入数据库.我想避免重复的条目插入到数据库中,所以我unique在MySQL中将该约束添加到该列.我正在检查title列中的重复项.在我的Python脚本中,我使用以下语句:

cursor.execute ("""INSERT INTO `database` (title, introduction) VALUES (%s, %s)""", (title, pure_introduction))
Run Code Online (Sandbox Code Playgroud)

现在,当向数据库添加重复条目时,它将产生错误.我不希望出现错误消息; 我只是想要,如果找到重复的条目,那么它应该不会将该值输入数据库.我该怎么做呢?

And*_*ndy 8

您可以使用INSERT IGNORE语法来抑制此类错误.

如果使用IGNORE关键字,则会忽略执行INSERT语句时发生的错误.例如,如果没有IGNORE,则复制表中现有UNIQUE索引或PRIMARY KEY值的行会导致重复键错误,并且语句将中止.使用IGNORE,该行将被丢弃并且不会发生错误.虽然重复键错误没有,但忽略错误可能会生成警告.

在您的情况下,查询将变为:

INSERT IGNORE INTO `database` (title, introduction) VALUES (%s, %s)
Run Code Online (Sandbox Code Playgroud)


ale*_*cxe 6

除了@Andy建议的内容(它应该真的作为答案发布),你还可以在Python中捕获异常并使其静音:

try:
    cursor.execute ("""INSERT INTO `database` (title, introduction) VALUES (%s, %s)""", (title, pure_introduction))
except MySQLdb.IntegrityError:
    pass  # or may be at least log?
Run Code Online (Sandbox Code Playgroud)

  • @sємsєм与MySQLdb一样-是的,[文档](http://mysql-python.sourceforge.net/MySQLdb.html)确实很糟糕。 (2认同)