2014-04-18 14 views
5

Gerçekten basit bir görev gibi görünüyor, ancak bunu doğru yapmakta zorlanıyorum.Pymysql (DictCursor) ile veri getirme

My SQL sorgusu şu şekilde görünür:

self.link = self.db.cursor(pymysql.cursors.DictCursor); 
self.link.execute("SELECT * FROM crawler_data WHERE id=%d" % id_crawl) 

Ve izleyerek sütunları erişmek istediğiniz:

row = self.link.fetchall() 
if row["address"]: 
    self.address = self.filterAddress(row["address"]) 

hatası "list indices must be integers, not str" olsun.

Ben yazdırdığınızda aşağıdaki yapı geri verilmesinde row:

{u'address': 'Address Value', u'domain': 'Domain Value'} 

nasıl "Adres" dizesini erişebilirim?

cevap

6

tarafından dize erişebilir ve bu address set olsaydı o zaman kontrol edin. Bunu yapmak için, self.link.fetchall()'u kullanmak iyi bir fikir değildir, çünkü bir döngüde kullanılabilecek tüm sonuçları içeren bir liste döndürür.

Kullanılacak doğru işlev, yalnızca sözlüğü döndüren self.link.fetchone() şeklindedir. Eğer kullanıyorsanız: Eğer

row = self.link.fetchall() 

kullanırsanız

row = self.link.fetchone() 

o zaman da

print row["key"] 

kullanabilirsiniz o zaman

print row[0]["key"] 
kullanmak zorunda
3

Fetchall() 'ın sonuçları, sözlüklerin bir listesi olacaktır. Örnekte, sadece 1 sonuç (WHERE id=:%d) seçmek için çalışıyordu Yukarıdaki durumda

results = self.link.fetchall() 
row = results[0] 
self.address = self.filterAddress(row["address"]) 
İlgili konular