2014-04-18 19 views
5

Wydaje się, że to naprawdę proste zadanie, ale mam trudności z robieniem tego we właściwy sposób.Pobieranie danych za pomocą pymysql (DictCursor)

mojej kwerendy SQL wyglądać następująco:

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

I chcę, aby uzyskać dostęp do kolumn brzmienie:

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

pojawia się błąd "list indices must be integers, not str".

Kiedy wydrukuj row otrzymuję następujący struktura powrócił:

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

Jak mogę uzyskać dostęp do „adres” ciąg?

Odpowiedz

6

w przypadku wyżej starałem się wybrać tylko 1 wynik (WHERE id=:%d), a następnie sprawdzić, czy miał address zestawu. Aby to zrobić, nie jest dobrym pomysłem, aby użyć self.link.fetchall(), ponieważ to zwraca listę wszystkich wyników, które mogą być wykorzystane w pętli na przykład.

Właściwą funkcją do zastosowania jest self.link.fetchone(), która zwraca tylko słownik. Jeśli używasz:

row = self.link.fetchone() 

następnie można również użyć

print row["key"] 

jeśli używasz

row = self.link.fetchall() 

następnie trzeba użyć

print row[0]["key"] 
3

Wyniki fetchall() będzie lista dictionairies. W przykładzie, dostęp ciąg przez

results = self.link.fetchall() 
row = results[0] 
self.address = self.filterAddress(row["address"]) 
Powiązane problemy