2014-04-18 7 views
5

Es scheint wie eine wirklich einfache Aufgabe, aber ich habe Schwierigkeiten, es richtig zu machen.Daten mit pymysql (DictCursor) holen

My SQL-Abfrage wie folgt aussehen:

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

Und ich möchte die Spalten zugreifen, indem Sie wie folgt vor:

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

ich den Fehler "list indices must be integers, not str" bekommen.

Wenn ich drucke die row ich die folgende Struktur zurück erhalten:

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

Wie greife ich auf die „Adresse“ string?

Antwort

6

Im obigen Fall ich nur 1 Ergebnis (WHERE id=:%d) auszuwählen versuche, und dann prüfen, ob es address Satz hatte. Um dies zu tun, ist es keine gute Idee, self.link.fetchall() zu verwenden, weil das eine Liste mit allen Ergebnissen zurückgibt, die zum Beispiel in einer Schleife verwendet werden können.

Die korrekte zu verwendende Funktion ist self.link.fetchone(), die nur das Wörterbuch zurückgibt. Wenn Sie:

row = self.link.fetchone() 

dann können Sie auch

print row["key"] 

verwenden Wenn Sie

verwenden
row = self.link.fetchall() 

dann haben Sie

print row[0]["key"] 
verwenden
3

Die Ergebnisse von fetchall() werden eine Liste von Dictionaires sein. In Ihrem Beispiel Zugriff auf die Zeichenfolge von

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