Djangoでdict_cursorを使用する質問する

Djangoでdict_cursorを使用する質問する

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}] 

おすすめ記事