Skip to content

Commit

Permalink
[1.3.X] Fixed #16293: Document a way to return dicts with column name…
Browse files Browse the repository at this point in the history
…s from a DB cursor. Backport of [16808] from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.3.X@16809 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
ubernostrum committed Sep 11, 2011
1 parent 0326e2e commit f242c02
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions docs/topics/db/sql.txt
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,30 @@ alias::
# Your code here...
transaction.commit_unless_managed(using='my_db_alias')

By default, the Python DB API will return results without their field
names, which means you end up with a ``list`` of values, rather than a
``dict``. At a small performance cost, you can return results as a
``dict`` by using something like this::

def dictfetchall(cursor):
"Returns all rows from a cursor as a dict"
desc = cursor.description
return [
dict(zip([col[0] for col in desc], row))
for row in cursor.fetchall()
]

Here is an example of the difference between the two::

>>> cursor.execute("SELECT id, parent_id from test LIMIT 2");
>>> cursor.fetchall()
((54360982L, None), (54360880L, None))

>>> cursor.execute("SELECT id, parent_id from test LIMIT 2");
>>> dictfetchall(cursor)
[{'parent_id': None, 'id': 54360982L}, {'parent_id': None, 'id': 54360880L}]


.. _transactions-and-raw-sql:

Transactions and raw SQL
Expand Down

0 comments on commit f242c02

Please sign in to comment.