psycopg2: DictCursor vs RealDictCursor
The main advantage of real dictionary cursor is the easiness to get a query output as json.
Compare:
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()))
versus
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))
There is no important difference between these options when it comes to performance.
You cannot get an expected json using json.dumps(cursor.fetchall())
for regular or dictionary-like cursors and need the conversion showed above. On the other hand, real dictionary cursor produces a much larger result so you should not use it if you really do not need it.