rst生成的html5在线ppt下载:http://www.kuaipan.cn/file/id_12834302878348970.htm
from django.db import connection
# context
print connection.queries
# content
''' result is:
[{
'time': '0.002',
'sql': u'SELECT `django_session`.`session_key`, `django_session`.`session_data`, `django_session`.`expire_date` FROM `django_session` WHERE (`django_session`.`session_key` = 5584f8d708ddc2d5e32831885fc36084 AND `django_session`.`expire_date` > 2013-05-07 10:39:36 )'}]
'''
title = models.CharField(max_length=100, blank=True, db_index=True, verbose_name=u'标题')
在模板中使用QuerySet缓存,需要使用with标签
获取大量数据时
news_list = News.objects.filter(title__contains=u'违法')
for news in news_list.iterator():
print news
如果这些还不足以生成你需要的SQL的话,继续往下看:
显式的执行SQL语句
cl = Channel.objects.filter(parent__id=1).extra(
select={
'another_news_count': 'SELECT COUNT(*) FROM web_news WHERE web_news.channel_id = web_channel.id'
}
)
print cl[0].another_news_count
cl = Channel.objects.raw('SELECT * FROM web_channel WHERE parent_id = 1')
print cl
# <RawQuerySet: 'SELECT * FROM web_channel WHERE parent_id = 1'>
for c in cl:
print c
尽量一次加载你需要的数据
news = News.objects.select_related().get(id=372924135)
print news.channel # 不会访问数据库
当只需要一个字段的值,返回list或者dict时,使用
如果你只是想要获取有多少数据,不要使用 len(queryset) 。
nl = News.objects.filter(channel__id=2)
nl.count()
# SELECT COUNT(*) FROM `web_news` WHERE `web_news`.`channel_id` = 2 ; 'time': '0.014'
len(nl)
# 'time': '0.422'
如果你只是想要知道是否至少存在一个结果,不要使用 if querysets 。
比如,假设有一个Email的model,有一个 body 的属性和一个多对多关系的User 属性,下面的模板代码是最优的:
{% if display_inbox %}
{% with emails=user.emails.all %}
{% if emails %}
<p>You have {{ emails|length }} email(s)</p>
{% for email in emails %}
<p>{{ email.body }}</p>
{% endfor %}
{% else %}
<p>No messages today.</p>
{% endif %}
{% endwith %}
{% endif %}
获取频道ID:
news.channel_id
而不是:
news.channel.id
Entry.objects.bulk_create([
Entry(headline="Python 3.0 Released"),
Entry(headline="Python 3.1 Planned")
])
...而不是
Entry.objects.create(headline="Python 3.0 Released")
Entry.objects.create(headline="Python 3.1 Planned")
这同样适用于 ManyToManyFields, 因此,这么做
team.members.add(me, my_friend)
...而不是这么做
team.members.add(me)
team.members.add(my_friend)
...这里 team 和 members 是多对多的关系。
https://docs.djangoproject.com/en/1.4/topics/db/optimization/