使用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"])
但是我收到一个错误提示:"列表索引必须是整数,而不是字符串"
。
当我打印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"]