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

MySQLdb python inserisce una riga o aumenta il conteggio sulla colonna se esiste

Ecco un approccio utilizzando il link fornito da @johnthexii (demo ) (usa solo MySQL, quindi non è specifico per Python)

CREATE TABLE UserNames (`username` varchar(35) unique, `duplicates` int);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('dba.stackexchange.com/', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

Ecco una ripartizione di quello che sta succedendo:Il username il campo è contrassegnato come univoco, quindi qualsiasi tentativo di inserire un record con un nome utente esistente fallirà a livello di database. Quindi il INSERT l'istruzione ha un extra

ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1

Questo dice a MySQL che invece di fallire l'INSERT di prendere solo i duplicates colonna e incrementa di uno. Quando esegui i tre comandi INSERT vedrai due record, stackoverflow.com ha un duplicates valore di 1, mentre dba.stackexchange.com ha un duplicates valore di 0.