Python MySQL 插入前检查重复项
这是一个表格
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)
)
我想往 kompas_url 这个表里插入数据,但前提是这个网址还不存在
有没有什么好主意?
谢谢
1 个回答
9
你可以先通过 SELECT
语句根据 url
来检查数据是否已经存在,或者你可以让 url
字段变得唯一:
CREATE TABLE IF NOT EXISTS kompas_url
...
url VARCHAR(1000) UNIQUE,
...
)
这样做可以防止 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()
这让我们可以在遇到唯一字段(包括主键)重复值的情况下提供一个 UPDATE
语句。在这种情况下,我们可能想要用当前日期更新 modified_date
字段。
编辑:正如 ~unutbu 所建议的,如果你不想在重复时做任何更改,可以使用 INSERT IGNORE
语法。这种方式的工作原理如下:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
这会把某些类型的错误变成警告——最有用的是,关于将会有重复唯一条目的错误。如果你在语句中加入 IGNORE
这个关键词,你就不会收到错误提示——查询会被简单地忽略掉。不过在复杂的查询中,这也可能会隐藏其他有用的错误,所以如果你想使用这个方法,最好确保你的代码是正确的。