使用pymysql获取数据(DictCursor)

8 投票
2 回答
19349 浏览
提问于 2025-04-18 03:14

这看起来是个很简单的任务,但我在正确地完成它时遇到了困难。

我的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"])

但是我收到一个错误提示:"列表索引必须是整数,而不是字符串"

当我打印row时,得到的结构是这样的:

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

我该如何访问“地址”这个字符串呢?

2 个回答

4

fetchall()的结果会是一个字典列表。在你的例子中,可以通过以下方式访问字符串:

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

在上面的例子中,我想只选择一个结果(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"]

撰写回答