2014-04-18 16 views
5

這似乎是一個非常簡單的任務,但我很難做到這一點。使用pymysql獲取數據(DictCursor)

我的SQL查詢是這樣的:

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

而且我想通過以下訪問列:

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

我得到的錯誤"list indices must be integers, not str"

當我打印row我得到以下結構返回:

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

如何訪問「地址」字符串?

回答

6

串在上述情況下,我想只選擇1結果(WHERE id=:%d),然後檢查它是否有address集。要做到這一點,它是不使用self.link.fetchall(),因爲這將返回可以在例如循環中使用的所有結果的列表是個好主意。

正確的功能使用起來self.link.fetchone()只返回字典。如果你使用:

row = self.link.fetchone() 

,那麼你也可以使用

print row["key"] 

如果使用

row = self.link.fetchall() 

,那麼你必須使用

print row[0]["key"] 
3

fetchall()的結果將是一個dictionairies列表。在你的榜樣,訪問由

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