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

Python mysql check for duplikat før indsættelse

Du kan enten finde ud af, om det er derinde først, ved at SELECT ing af url , eller du kan lave url felt unikt:

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

Dette vil forhindre MySQL i at indsætte en dublet række, men det vil også rapportere en fejl, når du prøver at indsætte. Dette er ikke godt – selvom vi kan håndtere fejlen, kan det skjule andre. For at omgå dette bruger vi ON DUPLICATE KEY UPDATE syntaks:

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

Dette giver os mulighed for at give en UPDATE sætning i tilfælde af en dubletværdi i et unikt felt (dette kan omfatte din primære nøgle). I dette tilfælde vil vi sandsynligvis opdatere modified_date felt med den aktuelle dato.

EDIT: Som foreslået af ~unutbu , hvis du ikke ønsker at ændre noget på en dublet, kan du bruge INSERT IGNORE syntaks. Dette fungerer ganske enkelt som følger:

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

Dette gør ganske enkelt visse typer fejl til advarsler - mest nyttigt er fejlen, der angiver, at der vil være en dublet unik indtastning. Hvis du placerer søgeordet IGNORE i din erklæring, vil du ikke få en fejl - forespørgslen vil simpelthen blive slettet. I komplekse forespørgsler kan dette også skjule andre fejl, som dog kan være nyttige, så det er bedst at sørge for, at din kode er korrekt, hvis du vil bruge den.




  1. SQL Alchemy Relationship loader efterlader en lås på bordet?

  2. Hvordan POW() virker i MariaDB

  3. SYSUTCDATETIME() Eksempler i SQL Server (T-SQL)

  4. Forældede funktioner til at tage ud af din værktøjskasse – Del 1