這個小代碼片段導致SIGSEGV(我認爲這是不可能的,在像python這樣的垃圾收集語言中,但我曾經是一個創造新的錯誤)即使數據庫存在和連接工作,無論如何,我試圖擴展psycopg2._psycopg.cursor類有一個函數返回字典形式的查詢結果,我做錯了什麼?分段錯誤擴展psycopg2._psycopg.cursor
import psycopg2
class dcursor(psycopg2._psycopg.cursor):
def __init__(self,parent_cursor):
self=parent_cursor
def dictfetchall(self):
"Returns all rows from a cursor as a dict"
desc = cursor.description
return [
dict(zip([col[0] for col in desc], row))
for row in cursor.fetchall()
]
conn = psycopg2.connect("dbname=dbpgs user=openerp")
cur = dcursor(conn.cursor())
cur.execute('select name_related from hr_employee;')
print cur.dictfetchall()
我需要dictfetchall()將光標的方法,因爲我在使用cursor.dictfetchall的OpenERP有大量的代碼,但我無法找出什麼樣的光標被稱爲有這麼我試圖很容易地實現它 – woggio
Psycopg遊標是可分類的,它們只需要以正確的方式進行子類化(例如調用它們的__init__並將正確的參數傳遞給它)。 – piro
確實 - 我忽視了超級構造函數調用的缺失,我的不好!不過,我希望它會比'SIGSEGV'更優雅地失敗:) –