在注意到Django的一些内置查询效率低下之后,编写了一些原始的SQL查询。我正在尝试遍历QuerySet
结果并将它们分组到类别中(我知道regroup
模板标记,这对我不起作用 - 我需要能够访问独立分组)。这是我的代码:
m = Media.objects.raw('SELECT * FROM table') # query simplified for sake of example
media_items = {'aim-icons' : [], 'banners' : [], 'hi-res-photos' : [], 'photos' : [], 'print-ads' : [], 'videos' : [], 'wallpapers' : [] }
for item in m:
media_items[item.type_slug].append(item)
这给了我想要的东西(例如我可以访问的列表,如media_items['wallpapers']
),但它为每次迭代运行数据库查询以获取type_slug
字段。我尝试在循环之前添加m = list(m)
,没有效果。
任何人都可以帮助我吗?这似乎应该很简单。
谢谢, 马特
答案 0 :(得分:4)
编辑:
这个问题在这里分解了Django的raw()
方法是如何工作的。它返回模型实例(具有您正在访问的属性,从而产生额外的查询)。
此处的相应工具为connection.cursor()
,cursor.execute()
和cursor.fetchall()
。以下是文档中的示例:
def my_custom_sql(): from django.db import connection, transaction cursor = connection.cursor() # Data modifying operation - commit required cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) transaction.commit_unless_managed() # Data retrieval operation - no commit required cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) row = cursor.fetchone() return row
http://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directly