这似乎是一项非常简单的任务,但我在做正确的事情时遇到了困难。
我的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'}
如何访问“地址”字符串?
答案 0 :(得分:8)
在上面的情况中,我尝试仅选择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"]
答案 1 :(得分:4)
fetchall()的结果将是一个字典列表。在您的示例中,通过
访问字符串results = self.link.fetchall()
row = results[0]
self.address = self.filterAddress(row["address"])