Tôi chưa từng làm việc với psycopg2 trước đây nhưng tôi đang cố gắng thay đổi nhà máy con trỏ thành DictCursor để fetchall hoặc fetchone sẽ trả lại từ điển thay vì danh sách.DictCursor dường như không hoạt động dưới psycopg2
Tôi đã tạo tập lệnh thử nghiệm để làm mọi thứ đơn giản và chỉ kiểm tra chức năng này. Đây là chút mã của tôi mà tôi cảm thấy sẽ hoạt động
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
Biến res luôn là danh sách chứ không phải từ điển như tôi mong đợi.
Giải pháp khắc phục hiện tại mà tôi đã triển khai là sử dụng chức năng này để tạo từ điển và chạy từng hàng được trả về bằng fetchall thông qua nó.
def build_dict(cursor, row):
x = {}
for key,col in enumerate(cursor.description):
x[col[0]] = row[key]
return d
Python là phiên bản 2.6.7 và psycopg2 là phiên bản 2.4.2.
Cảm ơn, tôi nghĩ rằng bạn đang phát hiện ra "giống như dict". Đó là một danh sách nhưng hoạt động như một từ điển. Điều đó có vẻ như một quyết định thiết kế kỳ lạ nhưng ít nhất nó đang hoạt động ngay bây giờ. Cảm ơn một lần nữa. – Jim
@Seth: Nếu bạn muốn có một từ điển thực, sử dụng aptly tên là 'RealDictCursor'. –
@Seth: một từ điển không có thứ tự để bạn không thể sử dụng nó như một bộ dữ liệu nữa, cột đầu tiên trong truy vấn sẽ không còn là 'hàng [0]' nữa mà là một cái gì đó tùy ý. Vì vậy, có một số công đức cho nó :) – Wolph