Python mysql comprueba si hay duplicado antes de insertar

aquí está la mesa

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) ) 

Estoy intentando hacer INSERT para la tabla kompas_url solo si la url no existe todavía

¿alguna idea?

Gracias

Puede averiguar si está allí primero, SELECT por url , o puede hacer que el campo url único:

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

Esto evitará que MySQL inserte una fila duplicada, pero también informará un error cuando intente e inserte. Esto no es bueno, aunque podemos manejar el error, puede que disimule a los demás. Para solucionar esto, usamos la syntax de 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() 

Esto nos permite proporcionar una statement de UPDATE en el caso de un valor duplicado en un campo único (esto puede incluir su clave principal). En este caso, probablemente deseamos actualizar el campo modified_date con la fecha actual.

EDITAR: según lo sugerido por ~ unutbu , si no desea cambiar nada en un duplicado, puede usar la syntax INSERT IGNORE . Esto simplemente funciona de la siguiente manera:

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

Esto simplemente convierte ciertos tipos de errores en advertencias; lo más útil es que el error que indica que habrá una entrada única duplicada. Si coloca la palabra clave IGNORE en su estado de cuenta, no recibirá un error: la consulta simplemente se eliminará. Sin embargo, en consultas complejas, esto también puede ocultar otros errores que podrían ser útiles, por lo que es mejor asegurarse de que su código sea correcto si desea usarlo.