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 を作成することの間にパフォーマンスの違いはありますか?
ベストアンサー1
いいえ、Django にはそのようなサポートはありませんDictCursor
。ただし、そのための小さな関数を書くことはできます。ドキュメントを参照してください:カスタムSQLを直接実行する:
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()
]
>>> cursor.execute("SELECT id, parent_id from test LIMIT 2");
>>> dictfetchall(cursor)
[{'parent_id': None, 'id': 54360982L}, {'parent_id': None, 'id': 54360880L}]