使用pymysql获取数据(DictCursor)

时间:2014-04-18 09:20:24

标签: python pymysql

这似乎是一项非常简单的任务,但我在做正确的事情时遇到了困难。

我的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'}

如何访问“地址”字符串?

2 个答案:

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