Oto podejście wykorzystujące link podany przez @johnthexii (demo ) (używa tylko MySQL, więc nie jest specyficzny dla Pythona)
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;
Oto podział tego, co się dzieje:username
pole jest oznaczone jako unikalne, więc każda próba wstawienia rekordu z istniejącą nazwą użytkownika zakończy się niepowodzeniem na poziomie bazy danych. Następnie INSERT
oświadczenie ma dodatkowy
ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1
To mówi MySQL, że zamiast nieudanej operacji INSERT, po prostu bierze duplicates
kolumna i przyrost o jeden. Po uruchomieniu trzech poleceń INSERT zobaczysz dwa rekordy, stackoverflow.com
ma duplicates
wartość 1, natomiast dba.stackexchange.com
ma duplicates
wartość 0.