sql >> Base de Datos >  >> RDS >> Mysql

Python mysql comprueba si hay duplicados antes de insertar

Puede averiguar si está allí primero, SELECT ing por url , o puede hacer que la url campo ú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 insertar. Esto no es bueno, aunque podemos manejar el error, podría disfrazar a otros. Para solucionar esto, usamos ON DUPLICATE KEY UPDATE sintaxis:

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 UPDATE declaración en el caso de un valor duplicado en un campo único (esto puede incluir su clave principal). En este caso, probablemente queramos actualizar la modified_date campo con la fecha actual.

EDITAR: Según lo sugerido por ~unutbu , si no desea cambiar nada en un duplicado, puede usar INSERT IGNORE sintaxis. 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 el error que indica que habrá una entrada única duplicada. Si coloca la palabra clave IGNORE en su declaración, no obtendrá 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 doblemente de que su código sea correcto si desea usarlo.