Python mysql在插入之前检查重复

时间:2010-04-02 01:09:50

标签: python mysql insert no-duplicates

这是表格

CREATE TABLE IF NOT EXISTS kompas_url
(
    id  BIGINT(20) NOT NULL AUTO_INCREMENT,
    url VARCHAR(1000),
    created_date datetime,
    modified_date datetime,
    PRIMARY KEY(id)
)

我只是在url不存在的情况下尝试INSERT到kompas_url表

任何想法?

感谢

1 个答案:

答案 0 :(得分:9)

您可以先SELECT url url来查明它是否在那里,或者您可以使CREATE TABLE IF NOT EXISTS kompas_url ... url VARCHAR(1000) UNIQUE, ... ) 字段唯一:

ON DUPLICATE KEY UPDATE

这将阻止MySQL插入重复的行,但是当您尝试插入时它也会报告错误。这不好 - 虽然我们可以处理错误,但可能会掩饰其他错误。为了解决这个问题,我们使用INSERT INTO kompas_url (url, created_date, modified_date) VALUES ('http://example.com', NOW(), NOW()) ON DUPLICATE KEY UPDATE modified_date = NOW() 语法:

UPDATE

这允许我们在唯一字段中具有重复值的情况下提供modified_date语句(这可以包括您的主键)。在这种情况下,我们可能希望使用当前日期更新INSERT IGNORE字段。

编辑:根据~unutbu的建议,如果您不想更改重复内容,可以使用INSERT IGNORE INTO kompas_url (url, created_date, modified_date) VALUES ('http://example.com', NOW(), NOW()) 语法。这简单地如下工作:

IGNORE

这简单地将某些类型的错误转换为警告 - 最有用的是,声明存在重复唯一条目的错误。如果将关键字{{1}}放入语句中,则不会出现错误 - 只会删除查询。在复杂查询中,这也可能隐藏其他可能有用的错误,因此如果您想使用它,最好确保您的代码是正确的。