2

MySQL に次のような単純なテーブルがあります。

> ID | ユーザー名 | カウント

Pythonを使用して達成したいことは次のとおりです。

  • ユーザー名が存在しない場合はテーブルに追加し、count を 1 に設定します。
  • ユーザー名が存在する場合は常に、count を 1 ずつ増やします。

Python 2.7でMySQLdbを使用するための最良のアプローチは何ですか

もちろん、ユーザー名を照会することでこれを行うことができます。更新カウントが存在する場合は、これを行うより良い方法があるかもしれません。

ありがとう !

4

1 に答える 1

1

@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.comduplicates値が 1 でdba.stackexchange.comduplicatesが 0 の 2 つのレコードが表示されます。

于 2013-06-24T23:41:27.083 に答える