2013-03-13 27 views
8

Bir MSQL db sahibiyim ve bir tablo aracılığıyla yinelemeli ve WHERE yan tümcesi karşılandığında bir eylem gerçekleştirmem gerekiyor. Sonra tablonun sonuna ulaştığında tepeye dönün ve baştan başlayın.Python MySQLdb tablo üzerinden yineleme

Şu anda bir döngü içinde

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 

var ama bu tabii ki sadece ilk girişi döngü tutar, ben Tabloya göz okumak için işlevinde için kullanmak gerekir sanırım, ama ben tam olarak emin değilim mysqldb kullanarak nasıl yapılır ..?

+0

i sadece bir yapabileceğine inanıyorum '(Hiçbiri) o dönünceye kadar' (a 'while' örneğin cinsinden)' – dmg

+0

defalarca cursor.execute() 'arayarak sorgunun sonuçlarını elde edebilirsiniz 'cursor.execute()' – PurityLake

+0

@PurityLake aracılığıyla döngü için hayır yapamazsınız. 'cursor.execute', satır sayısını döndürür. Sen aralığında item_idx için '' 'yapabilirsin (cursor.execute()): bir şey = cursor.fetchone()' – dmg

cevap

7

Bu, imleci sonuç kümesinin başlangıcında ayarlayacak ve kaç tane satırın geri döndüğünü size söyleyecektir (ben bu konuda ileri geri gittim, ancak this is the most authoritative documentation bulmuştum, eski Python MySQLdb lib execcount işlevini döndürdü, ancak Python veritabanı API Şartname v2.0, bu) en uyumlu olmalıdır

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

(Eğer

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

her satırın üzerinde yineleme Will karşılığında var kaç satır gerek söyleyecektir değil aralıkla x'i numaralandırmak için)

+2

ile gittim :) – dmg

+1

İyi nokta ... sabit –

+2

ve şimdi sadece imkansız olduğunu belirterek '.rowcount' – dmg

7

İmlecin sonuçlarına ulaştıktan sonra, içinde doğru yineleyin.

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