Я раньше не работал с psycopg2, но я пытаюсь изменить курсор factory на DictCursor, чтобы fetchall или fetchone вернули словарь вместо списка.
Я создал тест script, чтобы сделать вещи простыми и только проверить эту функциональность. Здесь мой маленький код, который, как мне кажется, должен работать
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.