命令行调试整理篇
时间:2009-08-16 来源:hkebao
目前还不知道怎么在页面级进行调试代码。虽然我安装上了Debug工具条还是不行!
目前的做法是基于manage.py shell 命令行处理的!
现在整理下常用的一些命令如下:
1.比如说我想调试
Models.objects.all()
这样的语句的话怎么办呢?
我一开始的做法是:
p = Models.objects.all()
for ele in p:
print p['id']
这样是不行的
正确的做法可以参考如下:
来看下如果我有多个条件的话如何处理
>>> from servermonitor.serverhardware.models import ServerHardware
>>> p1 = ServerHardware.objects.all()
>>> print [obj.id for obj in p1]
[17L, 12L, 13L, 18L, 15L, 16L, 14L]
>>> p1 = p1.filter(h_serial__contains='a')
>>> print [obj.id for obj in p1]
[12L, 15L]
>>> p1 = p1.filter(h_type__contains='a')
>>> print [obj.id for obj in p1]
[12L]
{这就证明了我们的写法是正常的呀!}
目前的做法是基于manage.py shell 命令行处理的!
现在整理下常用的一些命令如下:
1.比如说我想调试
Models.objects.all()
这样的语句的话怎么办呢?
我一开始的做法是:
p = Models.objects.all()
for ele in p:
print p['id']
这样是不行的
正确的做法可以参考如下:
- >>> queryset = Poll.objects.all()
- >>> print [p.headline for p in queryset] # Evaluate the query set.
来看下如果我有多个条件的话如何处理
>>> from servermonitor.serverhardware.models import ServerHardware
>>> p1 = ServerHardware.objects.all()
>>> print [obj.id for obj in p1]
[17L, 12L, 13L, 18L, 15L, 16L, 14L]
>>> p1 = p1.filter(h_serial__contains='a')
>>> print [obj.id for obj in p1]
[12L, 15L]
>>> p1 = p1.filter(h_type__contains='a')
>>> print [obj.id for obj in p1]
[12L]
{这就证明了我们的写法是正常的呀!}
每个QuerySet都包含一个缓存,以尽量减少对数据库的访问。理解他的工作原理很重要,可以写出最高效的代码。
在最新创建的QuerySet里,缓存是空的。在第一次QuerySet 被取值,因此数据库查询发生,django把查询结果放入缓存,并返回给请求,随后的查询取值会复用缓存中的结果。
保持缓存的思想习惯,因为如果你不正确使用查询缓存会有麻烦。例如下面例子会创建两个QuerySet
Python代码- >>> print [e.headline for e in Entry.objects.all()]
- >>> print [e.pub_date for e in Entry.objects.all()]
>>> print [e.headline for e in Entry.objects.all()] >>> print [e.pub_date for e in Entry.objects.all()]
这样意味着数据库查询会执行两次,实际两次数据库加载
为了避免这个问题,简单保存QuerySet 复用
Python代码- >>> queryset = Poll.objects.all()
- >>> print [p.headline for p in queryset] # Evaluate the query set.
- >>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation.
相关阅读 更多 +