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表
任何的想法?
谢谢
您可以发现无论是在那里第一次,由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放入语句中,则不会出现错误 - 只会删除查询.在复杂查询中,这也可能隐藏其他可能有用的错误,因此如果您想使用它,最好确保您的代码是正确的.