Получить данные с помощью 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"])

Я получаю сообщение об ошибке "list indices must be integers, not str".

Когда я печатаю row, я получаю следующую структуру:

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

Как получить доступ к строке «адрес»?


person Marcus Lind    schedule 18.04.2014    source источник


Ответы (2)


В приведенном выше случае я пытался выбрать только 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"]
person Marcus Lind    schedule 16.10.2014

Результатом fetchall() будет список словарей. В вашем примере получите доступ к строке с помощью

results = self.link.fetchall()
row = results[0]
self.address = self.filterAddress(row["address"])
person Tim Steinkuhler    schedule 16.10.2014