Python mysql在插入之前检查重复

Mic*_*Lee 3 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)
)
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

谢谢

Sam*_*war 9

您可以发现无论是在那里第一次,由SELECT荷兰国际集团的url,或可以使url领域独树一帜:

CREATE TABLE IF NOT EXISTS kompas_url
    ...
    url VARCHAR(1000) UNIQUE,
    ...
)
Run Code Online (Sandbox Code Playgroud)

这将阻止MySQL插入重复的行,但是当您尝试插入时它也会报告错误.这不好 - 虽然我们可以处理错误,但可能会掩饰其他错误.为了解决这个问题,我们使用以下ON DUPLICATE KEY UPDATE语法:

INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()
Run Code Online (Sandbox Code Playgroud)

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

编辑:正如~unutbu所建议的那样,如果你不想在重复上做任何改变,你可以使用INSERT IGNORE语法.这简单地如下工作:

INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
Run Code Online (Sandbox Code Playgroud)

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

  • 还有`INSERT IGNORE`,如果插入会导致复制唯一键,它将简单地忽略insert语句. (2认同)