Fixed #16293: Document a way to return dicts with column names from a DB cursor.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16808 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
7b92ae310d
commit
23b7758f75
|
@ -240,6 +240,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
|
||||
|
|
Loading…
Reference in New Issue