2016-02-12 10 views
8

Sto provando a estrarre dati da un database e assegnarli a elenchi diversi. questo specifico errore mi dà un sacco di problemi "TypeError: gli indici di tuple devono essere interi, non str" ho provato a convertirlo in float ed ecc, ma senza successo.TypeError: gli indici tuple devono essere numeri interi, non str

il codice va come di seguito

conn=MySQLdb.connect(*details*) 
cursor=conn.cursor() 
ocs={} 
oltv={} 
query="select pool_number, average_credit_score as waocs, average_original_ltv as waoltv from *tablename* where as_of_date= *date*" 
cursor.execute(query) 
result=cursor.fetchall() 

for row in result: 
print row 
ocs[row["pool_number"]]=int(row["waocs"]) 
oltv[row["pool_number"]]=int(row["waoltv"]) 

output di esempio di istruzione di stampa è la seguente:

('MA3146', 711L, 81L) 
('MA3147', 679L, 83L) 
('MA3148', 668L, 86L) 

e questo è l'errore esatto sto ottenendo:

ocs[row["pool_number"]]=int(row["waocs"]) 
TypeError: tuple indices must be integers, not str 

qualsiasi l'aiuto sarebbe apprezzato! grazie gente!

risposta

8

Come l'errore dice, row è una tupla, quindi non è possibile fare row["pool_number"]. È necessario utilizzare l'indice: row[0].

1

Il problema è come si accede row

In particolare row["waocs"] e row["pool_number"] di ocs[row["pool_number"]]=int(row["waocs"])

Se guardi in alto il official-documentation di fetchall() a trovare.

The method fetches all (or all remaining) rows of a query result set and returns a list of tuples.

Pertanto è necessario accedere ai valori delle righe con row[__integer__] come row[0]