Mysql
 sql >> Database >  >> RDS >> Mysql

Python mysql verifica la presenza di duplicati prima dell'inserimento

Puoi scoprire prima se è lì dentro, tramite SELECT tramite url oppure puoi creare l'url campo univoco:

CREATE TABLE IF NOT EXISTS kompas_url
    ...
    url VARCHAR(1000) UNIQUE,
    ...
)

Ciò impedirà a MySQL di inserire una riga duplicata, ma segnalerà anche un errore quando si tenta di inserire. Questo non va bene, anche se possiamo gestire l'errore, potrebbe mascherare gli altri. Per aggirare questo problema, utilizziamo il ON DUPLICATE KEY UPDATE sintassi:

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

Questo ci consente di fornire un UPDATE dichiarazione nel caso di un valore duplicato in un campo univoco (questo può includere la tua chiave primaria). In questo caso, probabilmente vorremo aggiornare il modified_date campo con la data corrente.

MODIFICA: Come suggerito da ~unutbu , se non vuoi modificare nulla su un duplicato, puoi utilizzare il INSERT IGNORE sintassi. Funziona semplicemente come segue:

INSERT IGNORE INTO kompas_url (url, created_date, modified_date)
VALUES ('http://example.com', NOW(), NOW())

Questo trasforma semplicemente alcuni tipi di errori in avvisi, cosa più utile, l'errore che afferma che ci sarà una voce univoca duplicata. Se inserisci la parola chiave IGNORE nella tua dichiarazione, non riceverai un errore:la query verrà semplicemente eliminata. Nelle query complesse, questo potrebbe anche nascondere altri errori che potrebbero essere utili, quindi è meglio assicurarsi doppiamente che il codice sia corretto se si desidera utilizzarlo.