[英]psycopg2: DictCursor vs RealDictCursor
AFAIU 和來自 docs, RealDictCursor
是一個專門的DictCursor
,它只允許從鍵(又名列名)訪問列,而DictCursor
允許從鍵或索引號訪問數據。
我想知道如果RealDictCursor
提供更大的靈活性,為什么要實施DictCursor
? 性能方面(或內存方面)是否如此不同(我想支持RealDictCursor
......)?
換句話說, RealDictCursor
用例與DictCursor
是什么?
真正的字典游標的主要優點是很容易將查詢輸出為 json。
相比:
with psycopg2.connect('dbname=test') as connection:
with connection.cursor(cursor_factory=RealDictCursor) as cursor:
cursor.execute("select * from my_table")
print(json.dumps(cursor.fetchall()))
相對
with psycopg2.connect('dbname=test') as connection:
with connection.cursor() as cursor:
cursor.execute("select * from my_table")
columns = [desc[0] for desc in cursor.description]
real_dict = [dict(zip(columns, row)) for row in cursor.fetchall()]
print(json.dumps(real_dict))
在性能方面,這些選項之間沒有重要區別。
對於常規或類似字典的游標,您無法使用json.dumps(cursor.fetchall())
獲得預期的 json,並且需要上面顯示的轉換。 另一方面,真正的字典光標會產生更大的結果,因此如果您真的不需要它,則不應使用它。
類 psycopg2.extras。 RealDictCursor (*args, **kwargs)
使用真正的字典作為行的基本類型的游標。 請注意,此游標非常專業,不允許正常訪問(使用整數索引)來獲取數據。 如果您需要以字典和列表的形式訪問數據庫行,請使用通用DictCursor而不是RealDictCursor 。 類 psycopg2.extras。 RealDictConnection自動使用RealDictCursor的連接。
注意自 Psycopg2.5 以來不是很有用:您可以使用 psycopg2.connect(dsn, cursor_factory= RealDictCursor ) 而不是RealDictConnection 。 類 psycopg2.extras。 RealDictRow (cursor) 表示數據記錄的 dict 子類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.