[Tutor] accessing Postgres db results by column name

Ricardo Aráoz ricaraoz at gmail.com
Sat Apr 10 00:27:27 CEST 2010

Serdar Tumgoren wrote:
> Hi folks,
> Does anyone know if there's native support in psycopg2 for accessing
> rows in a result-set by column name (rather than by index)?
> I'd like to be able to do something like below:
> cur.execute('select id, name from mytable')
> data = cur.fetchall()
> for row in data:
>     print row['id'], row['name']
> The functionality I have in mind is built into sqlite3:
> http://docs.python.org/py3k/library/sqlite3.html#accessing-columns-by-name-instead-of-by-index
> And there are a few Python recipes that let you mimic this behavior:
> http://code.activestate.com/recipes/81252-using-dtuple-for-flexible-query-result-access/
> http://code.activestate.com/recipes/52293-generate-field-name-to-column-number-dictionary/
> But I'm wondering if any Postgres db adapters offer native support,
> similar to sqlite3? I didn't notice it in a quick scan of the psycopg2
> docs (http://initd.org/psycopg/docs/), but perhaps the functionality
> is not documented or someone knows of a different Postgres adapter
> that has this capability?
> As always, any pointers are greatly appreciated!

I do it in mssql, but I think it should be the same with psycopg (sorry
I didn't polish it but I'm finishing my day and no time) :

>>> class reg(object):
...     def __init__(self, cursor, registro):
...         for (attr, val) in zip((d[0] for d in cursor.description),
registro) :
...             setattr(self, attr, val)

>>> for row in cursor.fetchall() :
...     r = reg(cursor, row)
...     print r.CosCPrd, r.CosCAno, r.CosCMes, r.CosCImpSis, r.CosCUsr


More information about the Tutor mailing list