我需要执行原始查询:
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。我这次不能这样做,因为sql实际上是一个group by
查询,并且不能包含id。
我绝对想要使用原始sql,而不是使用其他方式来做“group by”。
答案 0 :(得分:0)
这很有用。将元组的元组转换为字典列表,并从cursor.description获取字段描述。可以做成一个小功能。并且可能有一些聪明的lamdba可以缩短它。
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})
答案 1 :(得分: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"])
使用DictCursor
您不需要做任何事情只需将其传递给模板并使用它与使用django查询集的方式相同。