2014-04-18 4 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"]) 

I 오류 "list indices must be integers, not str"를 얻을.

나는 인쇄 할 때 나는 다음과 같은 구조가 반환 얻을 row :

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

은 어떻게 "주소"문자열을 액세스합니까?

답변

6

로 문자열을 액세스하고 address 세트가 있다면 다음 확인. 이렇게하려면 self.link.fetchall()을 사용하는 것은 좋지 않습니다. 예를 들어 루프에서 사용할 수있는 모든 결과가있는 목록을 반환하기 때문입니다.

사용할 올바른 함수는 사전 만 반환하는 self.link.fetchone()입니다. 당신이 사용하는 경우 : 당신이

row = self.link.fetchall() 

를 사용하는 경우

row = self.link.fetchone() 

당신은 또한

print row["key"] 

을 사용할 수 있습니다 당신은

print row[0]["key"] 
을 사용해야합니다
3

fetchall()의 결과는 dictionairies의 목록입니다. 귀하의 예제에서, 나는 단지 한 결과 (WHERE id=:%d)를 선택하려고했던 위의 경우

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