Проверка 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)
)
Я пытаюсь сделать INSERT для таблицы kompas_url, только если URL еще не существует
любая идея?
Спасибо
1 ответ
Вы можете узнать, находится ли он там первым, 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
в своем утверждении вы не получите ошибку - запрос просто будет отброшен. В сложных запросах это также может скрывать другие ошибки, которые могут быть полезны, поэтому лучше убедиться, что ваш код правильный, если вы хотите его использовать.