2013-03-13 19 views
8

Ich habe eine MSQL-Datenbank und ich muss durch eine Tabelle durchlaufen und eine Aktion ausführen, sobald eine WHERE-Klausel erfüllt ist. Dann, wenn es das Ende des Tisches erreicht hat, kehre an die Spitze zurück und fange neu an.Python MySQLdb Iterieren durch Tabelle

Zur Zeit habe ich

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 

in einer Schleife aber offensichtlich hält nur den ersten Eintrag Looping, ich denke, man die in Funktion verwenden, müssen durch die Tabelle zu lesen, aber ich bin nicht sicher, Wie mache ich das mit mysqldb ..?

+0

können Sie die Ergebnisse der Abfrage erhalten, indem 'cursor.fetchone Aufruf()' wiederholt (in einer 'while' zum Beispiel), bis es' zurückzugibt (None,) ' – dmg

+0

ich glauben Sie einfach ein tun können for-Schleife durch Ihre 'cursor.execute()' – PurityLake

+0

@PurityLake Nein können Sie nicht. 'cursor.execute' gibt die Anzahl der Zeilen zurück. Sie können 'für item_idx im Bereich (cursor.execute()): etwas = cursor.fetchone()' – dmg

Antwort

7

Dies wird den Cursor auf den Anfang der Ergebnismenge setzen und Ihnen sagen, wie viele Zeilen es zurückbekommen hat (ich ging hin und her, aber this is the most authoritative documentation Ich habe gefunden, ältere Python MySQLdb lib zurückgegeben rowcount beim Ausführen, aber Python Database API-Spezifikation v2.0 nicht der Fall, sollte dies die kompatibel sein)

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

wird Ihnen sagen, wie viele Zeilen bekam man im Gegenzug

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

Wird über jede Zeile durchlaufen (keine Notwendigkeit, um x mit dem Bereich aufzuzählen)

+2

beachtenswert, dass die Abfrage fehlerhaft ist – dmg

+1

Guter Punkt ... Fixieren ... –

+2

fixiert und jetzt ist es nur unmöglich :) – dmg

7

Sobald Sie den Cursor gefunden haben, können Sie direkt darin iterieren.

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