AFAIU和docs中的RealDictCursor是专门的DictCursor,它只能访问键(也称为列名)中的列,而DictCursor可以访问键或索引号中的数据。
我想知道如果DictCursor提供更大的灵活性,为什么要实现RealDictCursor?是性能方面(或内存方面)如此不同(我想像中支持RealDictCursor ...)吗?
换句话说,与DictCursor相比,RealDictCursor用例是什么?

最佳答案

真正的字典游标的主要优点是易于获取查询输出为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,并且需要上面显示的转换。另一方面,真正的字典游标会产生更大的结果,因此,如果您真的不需要它,则不要使用它。

关于python - psycopg2:DictCursor与RealDictCursor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45399347/

10-11 22:16