@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。