@johnthexii が提供したリンク ( demo ) を使用したアプローチを次に示します (MySQL のみを使用しているため、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;
何が起こっているかの内訳は次のとおりです。usernameフィールドは一意としてマークされているため、既存のユーザー名を持つレコードを挿入しようとすると、データベース レベルで失敗します。次に、INSERTステートメントには余分なものがあります
ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1
これは、INSERT が失敗する代わりに、duplicates列を取得して 1 ずつインクリメントすることを MySQL に伝えます。3 つの INSERT コマンドを実行するとstackoverflow.com、duplicates値が 1 でdba.stackexchange.com値duplicatesが 0 の 2 つのレコードが表示されます。