2014-04-18 24 views
5

Nó có vẻ giống như một nhiệm vụ thực sự đơn giản nhưng tôi gặp khó khăn khi thực hiện nó một cách thích hợp.Tìm nạp dữ liệu với pymysql (DictCursor)

My SQL Query giống như thế này:

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

Và tôi muốn truy cập vào các cột bằng cách như sau:

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

tôi nhận được lỗi "list indices must be integers, not str".

Khi tôi in row tôi nhận được cơ cấu như sau trả về:

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

Làm thế nào để truy cập vào "địa chỉ" chuỗi?

Trả lời

6

Trong trường hợp trên, chúng tôi đã cố gắng để chỉ chọn 1 kết quả (WHERE id=:%d), và sau đó kiểm tra xem nó có address bộ. Để làm điều này, không nên sử dụng self.link.fetchall() vì điều đó trả về một danh sách có tất cả các kết quả có thể được sử dụng trong một vòng lặp chẳng hạn.

Chức năng chính xác để sử dụng là self.link.fetchone() chỉ trả lại từ điển. Nếu bạn sử dụng:

row = self.link.fetchone() 

sau đó bạn cũng có thể sử dụng

print row["key"] 

Nếu bạn sử dụng

row = self.link.fetchall() 

sau đó bạn phải sử dụng

print row[0]["key"] 
3

Kết quả của fetchall() sẽ là danh sách các từ điển. Trong ví dụ của bạn, truy cập vào chuỗi bởi

results = self.link.fetchall() 
row = results[0] 
self.address = self.filterAddress(row["address"]) 
Các vấn đề liên quan