@johnthexiiが提供したリンクを使用したアプローチは次のとおりです(デモ )(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
を取得することをMySQLに通知します。 列を1つ増やします。 3つのINSERTコマンドを実行すると、stackoverflow.com
という2つのレコードが表示されます。 duplicates
があります 値は1、dba.stackexchange.com
duplicates
があります 値0。