文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>命令行调试整理篇

命令行调试整理篇

时间:2009-08-16  来源:hkebao

目前还不知道怎么在页面级进行调试代码。虽然我安装上了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()]  
>>> print [e.headline for e in Entry.objects.all()] >>> 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. 
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载