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