楼主数据库中有一个表,三千多条数据,想一次性输出到一个html页面中
先获取到结果集,然后在模板中for循环渲染
django默认是使用了惰性查询(lazy query)
然后发现一下子有三千多条查询语句。
能否一次性读到内存中,绕过这个惰性查询?
先获取到结果集,然后在模板中for循环渲染
django默认是使用了惰性查询(lazy query)
然后发现一下子有三千多条查询语句。
能否一次性读到内存中,绕过这个惰性查询?
|
PanJiaChenAug 6, 2015
1
我不会
|
|
SinicAug 6, 2015
2
你是不是用了queryset.iterator()?使用iterator()无法生成cache,遍历同一个queryset时会重复执行查询。
|
|
virusdefenderAug 6, 2015
3
逆循环的时候是不是涉及到每一项的外键的内容了?
如果是这样的话,一次查出来就好了。https://docs.djangoproject.com/en/1.8/ref/models/querysets/#select-related |
|
onlyiceAug 6, 2015
4
猜测跟 Django 的 lazy query 没有关系。。
可能是你的 Model 有 Relation,用 prefetch_related 试试 |
|
zhuangzhuang1988Aug 6, 2015
5
贴关键代码, Django应该也不会3000条就生成出3000个查询语句的
|
|
tudou527Aug 7, 2015
6
同问,肯定是楼主代码的问题。
|
|
7
@zhuangzhuang1988
关键代码: 视图中的 items = Exams.objects.raw(""" SELECT * from exams,vendor WHERE exams.vendor_id=vendor.id ORDER BY vendor.name asc,exams.`code` ASC""") exams 模板中的 {% for item in items %} <tr> <th scope="row">{{ forloop.counter }}</th> <td><a href="{% url 'exam' item.code %}">{{ item.code }}</a></td> <td>{{ item.vendor.name }}</td> <td>{{ item.name }}</td> </tr> {% endfor %} Exams表中的vendor是外键,关联vendor表 |
|
8
@virusdefender 是的,我用了 select-related ,大幅度提高了性能哈
|