Я раньше не работал с psycopg2, но я пытаюсь изменить фабрику курсора на DictCursor, чтобы функция fetchall или fetchone возвращала словарь вместо списка.
I создал тестовый сценарий, чтобы упростить задачу и только протестировать эту функциональность. Вот мой небольшой фрагмент кода, который, как мне кажется, должен работать
import psycopg2
import psycopg2.extras
conn = psycopg2.connect("dbname=%s user=%s password=%s" % (DATABASE, USERNAME, PASSWORD))
cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
cur.execute("SELECT * from review")
res = cur.fetchall()
print type(res)
print res
Переменная res всегда является списком, а не словарем, как я ожидал.
Текущий обходной путь, который я реализовал, заключается в использовании этой функции, которая создает словарь и прогонять через нее каждую строку, возвращенную функцией fetchall.
def build_dict(cursor, row):
x = {}
for key,col in enumerate(cursor.description):
x[col[0]] = row[key]
return d
Python имеет версию 2.6.7, а psycopg2 - версию 2.4.2.