我以前沒有使用psycopg2,但我試圖將遊標工廠更改爲DictCursor,以便fetchall或fetchone將返回字典而不是列表。DictCursor似乎不能在psycopg2下工作
我創建了一個測試腳本,使事情變得簡單,只測試這個功能。這是我覺得應該工作的一小段代碼
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。
謝謝,我認爲你現在與「字典」。這是一個列表,但像字典一樣。這似乎是一個奇怪的設計決定,但至少現在正在工作。再次感謝。 – Jim
@Seth:如果你想要一個真正的字典,使用恰當命名的'RealDictCursor'。 –
@Seth:字典沒有順序,所以你不能再使用它作爲元組,查詢中的第一列不再是'row [0]',而是任意的。所以有一些優點:) – Wolph