2016-02-12 22 views
8

Tôi đang cố gắng lấy dữ liệu từ cơ sở dữ liệu và gán chúng cho các danh sách khác nhau. lỗi cụ thể này là cho tôi rất nhiều rắc rối "TypeError: chỉ số tuple phải là số nguyên, không str" tôi đã cố gắng chuyển đổi nó để nổi và vv, nhưng không thành công.LoạiError: chỉ số tuple phải là số nguyên, không str

mã đi như sau

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"]) 

đầu ra mẫu của câu lệnh in như sau:

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

và đây là lỗi chính xác tôi đang nhận được:

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

bất kỳ giúp đỡ sẽ được đánh giá cao! cảm ơn mọi người !

Trả lời

8

Giống như lỗi nói, row là một bộ tuple, vì vậy bạn không thể làm row["pool_number"]. Bạn cần sử dụng chỉ mục: row[0].

1

Vấn đề là làm thế nào bạn truy cập row

Cụ row["waocs"]row["pool_number"] của ocs[row["pool_number"]]=int(row["waocs"])

Nếu bạn nhìn lên official-documentation của fetchall() bạn tìm thấy.

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

Vì vậy, bạn phải truy cập vào các giá trị của hàng với row[__integer__] như row[0]

Các vấn đề liên quan