Zde je přístup pomocí odkazu, který poskytl @johnthexii (demo ) (používá pouze MySQL, takže není specifický pro 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;
Zde je rozpis toho, co se děje:username
pole je označeno jako jedinečné, takže jakýkoli pokus o vložení záznamu s existujícím uživatelským jménem selže na úrovni databáze. Poté INSERT
výpis má navíc
ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1
To říká MySQL, že místo selhání INSERT vezme pouze duplicates
sloupec a zvýšit o jednu. Když spustíte tři příkazy INSERT, uvidíte dva záznamy, stackoverflow.com
má duplicates
hodnotu 1, zatímco dba.stackexchange.com
má duplicates
hodnotu 0.