Si vous souhaitez obtenir un tuple nommé obj à partir d'une requête de base de données, vous pouvez utiliser l'extrait suivant :
from collections import namedtuple
def create_record(obj, fields):
''' given obj from db returns named tuple with fields mapped to values '''
Record = namedtuple("Record", fields)
mappings = dict(zip(fields, obj))
return Record(**mappings)
cur.execute("Select * FROM people")
colnames = [desc[0] for desc in cur.description]
rows = cur.fetchall()
cur.close()
result = []
for row in rows:
result.append(create_record(row, colnames))
Cela vous permet d'accéder aux valeurs des enregistrements comme s'il s'agissait de propriétés de classe, c'est-à-dire
record.id, record.other_table_column_name, etc.
ou encore plus court
from psycopg2.extras import NamedTupleCursor
with cursor(cursor_factory=NamedTupleCursor) as cur:
cur.execute("Select * ...")
return cur.fetchall()