python
from psycopg.rows import dict_row
with psycopg.connect(conninfo, row_factory=dict_row) as conn:
zeilen = conn.execute('SELECT id, name, umsatz FROM kunden ORDER BY name').fetchall()
print(zeilen[0]) # {'id': 1, 'name': 'Anna', 'umsatz': Decimal('120.50')}
conn.execute(...) ist eine Kurzform, die einen Cursor anlegt und gleich ausführt. Mit dict_row kommt jede Zeile als Dictionary mit den Spaltennamen als Schlüsseln. Das lässt sich direkt an Jinja-Templates (Kapitel 14) oder Excel-Export (Kapitel 11) weitergeben.
Datentypen: Python und Postgres wandeln automatisch um: int zu integer, str zu text, datetime zu timestamp, date zu date, None zu NULL. Spalten vom Typ NUMERIC kommen als Decimal zurück, nicht als float. Für JSON-Spalten nimmst du psycopg.types.json.Jsonb(dict).