0

結合とエイリアス名を使用してデータベースからデータを取得するために Django の生の SQL クエリを使用しています 私のクエリ:

SELECT DISTINCT
   A.entity_id AS entity_id,
   A.email AS email,
   A.catquizid AS style_quiz_score,
   A.catquizquesans AS style_quiz_answer,
   A.created_at AS date_joined,
   A.is_active AS is_active,
   B.attribute_id AS attribute_id,
   B.value AS info
FROM
   customer_entity AS A INNER JOIN customer_entity_varchar AS B
   ON A.entity_id=B.entity_id WHERE B.attribute_id LIMIT 2

私はこのような結果を取得しています:

row = cursor.fetchall()

行を返すHttpResponseと正しい結果が表示されますが、返すHttpResponse(row['entity_id'])とエラーが表示されますSorry, an error occurred.

row彼のエイリアス名を使用して配列にアクセスする方法を教えてください。

4

1 に答える 1

2

ここから: https://docs.djangoproject.com/en/dev/topics/db/sql/

デフォルトでは、Python DB API はフィールド名なしで結果を返します。つまり、辞書ではなく、値のリストが返されます。わずかなパフォーマンス コストで、次のようなものを使用して結果を dict として返すことができます。

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()
    ]

2 つの違いの例を次に示します。

>>> 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}]
于 2013-02-06T10:50:21.770 に答える