web-dev-qa-db-ja.com

Python MySQLdbはテーブルを反復処理します

MSQLデータベースがあり、WHERE句が満たされたら、テーブルを反復処理してアクションを実行する必要があります。次に、テーブルの最後に到達したら、一番上に戻って最初からやり直します。

現在私は持っています

cursor = database.cursor()    
cursor.execute("SELECT user_id FROM round WHERE state == -1 AND state = 2")  
round_id = cursor.fetchone()

if round != 5
   ...do stuff

ループ内ですが、これは明らかに最初のエントリのみをループし続けます。テーブルを読み取るにはforin関数を使用する必要があると思いますが、mysqldbを使用してこれを行う方法が正確にわかりませんか?

13
DavidJB

これにより、結果セットの先頭にカーソルが設定され、戻ってきた行数がわかります(これを行ったり来たりしましたが、 これは最も信頼できるドキュメントです 私が見つけた、古いPython MySQLdb libは実行時に行数を返しましたが、PythonデータベースAPI仕様v2.0は返しません、これが最も互換性があるはずです)

cursor.execute("SELECT user_id FROM round WHERE state = -1 OR state = 2")
numrows = cursor.rowcount

見返りに何行取得したかを教えてくれます

for x in xrange(0,numrows):
  row = cursor.fetchone()
  print row[0], "-->", row[1]

各行を反復処理します(範囲でxを列挙する必要はありません)

8
Jason Sperske

カーソルに結果が表示されたら、そのカーソルで繰り返し処理できます。

cursor = database.cursor()    
cursor.execute("SELECT user_id FROM round WHERE state == -1 AND state = 2")  
for round in cursor:
  if round[0] != 5
    ...do stuff
13
Dvd Avins