1

生のクエリを実行する必要があります。

 cursor.execute("select id, name from people")
 results = cursor.fetchall()

これを Django テンプレートで使用できるように変換するにはどうすればよいですか。

{% for person in results %}
  {{person.name}}
{% endfor %}

通常、私はモデルを使用します:

results = people.objects.raw("select id, name from people")

これは、クエリで使用する他のモデル/テーブルの数に関係なく機能します。

ただし、その方法では、人物モデルのプライマリ ID を含める必要があります。group bySQLは実際にはクエリであり、IDを含めることができないため、今回はできません。

「グループ化」に相当する他の方法ではなく、生のSQLを使用したいのは間違いありません。

4

2 に答える 2

1

これはうまくいきました。タプルのタプルを辞書のリストに変換し、cursor.description からフィールドの説明を取得します。ちょっとした機能として作れます。そしておそらく、それを短くすることができるいくつかのスマートラムバがあります。

        cursor = connection.cursor()
        cursor.execute(my_select)
        results = cursor.fetchall()

        x = cursor.description
        resultsList = []   
        for r in results:
            i = 0
            d = {}
            while i < len(x):
                d[x[i][0]] = r[i]
                i = i+1
            resultsList.append(d)

        return render_to_response(my_template, {"results":resultsList})
于 2013-01-10T18:34:30.743 に答える
0

MySQLdbカーソルを使用して生のSQLクエリを実行する必要があると主張する場合は、ディクショナリカーソルDictCursorを作成して、列の値に位置ではなく名前でアクセスできるようにします。

 cursor.close ()
 cursor = conn.cursor (MySQLdb.cursors.DictCursor)
 cursor.execute ("SELECT id, name FROM people")
 results = cursor.fetchall ()
 for row in results:
     print "%s, %s" % (row["id"], row["name"])

テンプレートに渡して、django クエリセットと同じように使用DictCursorするだけで、何もする必要はありません。

于 2013-01-10T18:46:31.203 に答える