Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29308473
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-08-16 10:12:17

目前还不知道怎么在页面级进行调试代码。虽然我安装上了Debug工具条还是不行!
目前的做法是基于manage.py shell 命令行处理的!
现在整理下常用的一些命令如下:

1.比如说我想调试
Models.objects.all()
这样的语句的话怎么办呢?
我一开始的做法是:
p = Models.objects.all()
for ele in p:
   print p['id']
这样是不行的
正确的做法可以参考如下:

  1. >>> queryset = Poll.objects.all()  
  2. >>> print [p.headline for p in queryset] # Evaluate the query set.
当然这里面的headline是这个字段名称的!

来看下如果我有多个条件的话如何处理

>>> 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代码
  1. >>> print [e.headline for e in Entry.objects.all()]  
  2. >>> print [e.pub_date for e in Entry.objects.all()]  

 这样意味着数据库查询会执行两次,实际两次数据库加载

为了避免这个问题,简单保存QuerySet 复用

Python代码
  1. >>> queryset = Poll.objects.all()  
  2. >>> print [p.headline for p in queryset] # Evaluate the query set.  
  3. >>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation. 

阅读(763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~