8

这似乎是一项非常简单的任务,但我很难正确完成。

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

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

4

2 回答 2

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"]
于 2014-10-16T11:16:33.807 回答
4

fetchall() 的结果将是一个字典列表。在您的示例中,通过

results = self.link.fetchall()
row = results[0]
self.address = self.filterAddress(row["address"])
于 2014-10-16T09:41:22.047 回答