使用pymysql获取数据(DictCursor)

Mar*_*ind 8 python pymysql

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

我的SQL查询看起来像这样:

self.link = self.db.cursor(pymysql.cursors.DictCursor);
self.link.execute("SELECT * FROM crawler_data WHERE id=%d" % id_crawl)
Run Code Online (Sandbox Code Playgroud)

我想通过以下方式访问列:

row = self.link.fetchall()
if row["address"]:
    self.address = self.filterAddress(row["address"])
Run Code Online (Sandbox Code Playgroud)

我收到了错误"list indices must be integers, not str".

当我打印row我得到以下结构返回:

{u'address': 'Address Value', u'domain': 'Domain Value'}
Run Code Online (Sandbox Code Playgroud)

如何访问"地址"字符串?

Mar*_*ind 8

在上面的情况下,我试图只选择1个result(WHERE id=:%d),然后检查它是否已address设置.要做到这一点,使用它不是一个好主意,self.link.fetchall()因为它会返回一个列表,其中包含可以在循环中使用的所有结果.

要使用的正确函数self.link.fetchone()只返回字典.如果您使用:

row = self.link.fetchone()
Run Code Online (Sandbox Code Playgroud)

那你也可以用

print row["key"]
Run Code Online (Sandbox Code Playgroud)

如果你使用

row = self.link.fetchall()
Run Code Online (Sandbox Code Playgroud)

然后你必须使用

print row[0]["key"]
Run Code Online (Sandbox Code Playgroud)