Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Python-Mysql-Prüfung vor dem Einfügen auf Duplikate

Ob es drin ist, kannst du entweder erst durch SELECT herausfinden per url , oder Sie können die url erstellen Feld eindeutig:

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

Dadurch wird MySQL daran gehindert, eine doppelte Zeile einzufügen, aber es wird auch einen Fehler melden, wenn Sie versuchen, es einzufügen. Das ist nicht gut – obwohl wir mit dem Fehler umgehen können, könnte er andere verschleiern. Um dies zu umgehen, verwenden wir den ON DUPLICATE KEY UPDATE Syntax:

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

Dadurch können wir ein UPDATE bereitstellen Anweisung im Fall eines doppelten Werts in einem eindeutigen Feld (dies kann Ihren Primärschlüssel enthalten). In diesem Fall möchten wir wahrscheinlich das modified_date aktualisieren Feld mit dem aktuellen Datum.

BEARBEITEN: Wie von ~unutbu vorgeschlagen , wenn Sie an einem Duplikat nichts ändern möchten, können Sie INSERT IGNORE verwenden Syntax. Das funktioniert einfach so:

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

Dadurch werden bestimmte Arten von Fehlern einfach in Warnungen umgewandelt – am nützlichsten ist der Fehler, der besagt, dass es einen doppelten eindeutigen Eintrag geben wird. Wenn Sie das Schlüsselwort IGNORE platzieren in Ihre Anweisung, erhalten Sie keinen Fehler – die Abfrage wird einfach verworfen. Bei komplexen Abfragen kann dies auch andere Fehler verbergen, die jedoch nützlich sein könnten. Stellen Sie daher am besten sicher, dass Ihr Code korrekt ist, wenn Sie ihn verwenden möchten.