@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 つのレコードが表示されます。