ORM Django. , Django . :
1) iterator()
queryset . , , ,
traffic = Traffic.objects.all()
for t in traffic.iterator():
...
...
2) db_index=True
models. Django,
, . Field.db_index Meta.index_together, Django. , filter(), exclude(), order_by() .., .
,
class Traffic(Timestamp):
sessions = models.IntegerField(blank=True, null=True, db_index=True)
new_users = models.IntegerField(blank=True, null=True, db_index=True)
reminder = models.IntegerField(blank=True, null=True, db_index=True)
campaigns = models.IntegerField(blank=True, null=True, db_index=True)
new_sales = models.IntegerField(blank=True, null=True, db_index=True)
3) prefetch_related() select_related()
models, prefetch_related select_related . Django,
select_related , SQL join SELECT. select_related . , , "" , select_related - -.
prefetch_related, ,
, "" Python.
"--" "--",
select_related, , select_related.
select_related join, prefetch_related . , 30% .
4) Django Pagination
template , Pagination.
5) Querysets Lazy
, Querysets Django , , , / . Django , . ,
traffic = Traffic.objects.all()
. traffic , . , - , -. , :
for t in traffic.iterator():
print(t.sessions)
6) django-debug-toolbar
Django Debug , /, . :
: (, Querysets Lazy)
traffic = Traffic.objects.all()
totals = traffic.aggregate(Sum('sessions'), Sum('new_users'), Sum('reminder'), Sum('campaigns'), Sum('new_sales'), Sum('sales_renewals'))
total_sessions = totals.get('sessions__sum')
total_new_users = totals.get('new_users__sum')
total_reminder = totals.get('reminder__sum')
total_campaigns = totals.get('campaigns__sum')
total_new_sales = totals.get('new_sales__sum')
total_sales_renewals = totals.get('sales_renewals__sum')
t_2014 = traffic.filter(created__year='2014')
t_sessions_2014_wd2 = t_2014.filter(created__week_day=2).aggregate(Sum('sessions'))
...
...
# 1 ( ):
{% for t in traffic.iterator %}
{{ t.sessions }}
...
...
{% endfor %}