使用dict_cursor要獲得在Django光標我做的:在Django
from django.db import connection
cursor = connection.cursor()
我怎麼會在Django得到一個字典光標,相當於 -
import MySQLdb
connection = (establish connection)
dict_cursor = connection.cursor(MySQLdb.cursors.DictCursor)
有沒有辦法做到這在Django?當我嘗試cursor = connection.cursor(MySQLdb.cursors.DictCursor)
時,我得到了Exception Value: cursor() takes exactly 1 argument (2 given)
。或者我需要直接連接到python-mysql驅動程序?
Django文檔建議使用dictfetchall
:
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()
]
是否有使用這個和創建dict_cursor之間的性能差異?
只是一個有趣的注意。表達式(在cursor.description中x的x.name)產生一個不是列表對象的生成器。這種生成器將在「for cursor in cursor」循環的第一次迭代之後耗盡。爲了使這個代碼示例在多行上工作,我們需要通過將圓括號更改爲方括號來預取列:[x.name,用於cursor.description中的x] –