Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Python mysql verifica se há duplicata antes de inserir


Você pode descobrir se está lá primeiro, por SELECT por url , ou você pode fazer o url campo exclusivo:
CREATE TABLE IF NOT EXISTS kompas_url
    ...
    url VARCHAR(1000) UNIQUE,
    ...
)

Isso impedirá o MySQL de inserir uma linha duplicada, mas também relatará um erro quando você tentar inserir. Isso não é bom - embora possamos lidar com o erro, ele pode disfarçar outros. Para contornar isso, usamos o ON DUPLICATE KEY UPDATE sintaxe:
INSERT INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())
ON DUPLICATE KEY UPDATE modified_date = NOW()

Isso nos permite fornecer um UPDATE no caso de um valor duplicado em um campo exclusivo (isso pode incluir sua chave primária). Nesse caso, provavelmente queremos atualizar o modified_date campo com a data atual.

EDITAR: Conforme sugerido por ~unutbu , se você não quiser alterar nada em uma duplicata, você pode usar o INSERT IGNORE sintaxe. Isso simplesmente funciona da seguinte forma:
INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())

Isso simplesmente transforma certos tipos de erros em avisos - mais útil, o erro que informa que haverá uma entrada única duplicada. Se você colocar a palavra-chave IGNORE em sua declaração, você não receberá um erro - a consulta será simplesmente descartada. Em consultas complexas, isso também pode ocultar outros erros que podem ser úteis, portanto, é melhor certificar-se duplamente de que seu código está correto se você quiser usá-lo.