2014-04-18 8 views
5

Sembra un compito davvero semplice ma ho difficoltà a farlo correttamente.Recupera i dati con pymysql (DictCursor)

My SQL query simile a questa:

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

e voglio accedere alle colonne dal seguente:

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

ottengo l'errore "list indices must be integers, not str".

Quando stampo il row ottengo la seguente struttura tornato:

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

Come si accede alla "indirizzo" stringa?

risposta

6

Nel caso di cui sopra che stavo cercando di selezionare solo 1 risultato (WHERE id=:%d), e quindi controllare se avesse address set. Per fare ciò, non è una buona idea usare self.link.fetchall() perché restituisce un elenco con tutti i risultati che possono essere utilizzati in un ciclo, ad esempio.

La funzione corretta da utilizzare è self.link.fetchone() che restituisce solo il dizionario. Se si utilizza:

row = self.link.fetchone() 

allora si può anche usare

print row["key"] 

Se si utilizza

row = self.link.fetchall() 

allora dovete usare

print row[0]["key"] 
3

I risultati del fetchall() saranno un elenco di dizionari. Nel tuo esempio, accedere alla stringa da

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