查询集Django 模型通过默认的 Manager 类 清单 11. 打印所有的职位>>> from jobs.models import Job >>> for job in Job.objects.all(): ... print job Manager 类还有两个过滤方法:一个是 清单 12. 排除和过滤职位>>> from jobs.models import Job >>> from datetime import datetime >>> q1 = Job.objects.filter(pub_date__gte=datetime(2006, 1, 1)) >>> q2 = Job.objects.exclude(pub_date__lt=datetime(2006, 1, 1))
清单 13. 对职位进行更多的排除和过滤>>> from jobs.models import Job >>> from datetime import datetime >>> q3 = Job.objects.filter(pub_date__gte=datetime(2006, 1, 1)) >>> q4 = q3.filter(location__city__exact="Cleveland", ... location__state__exact="Ohio") QuerySets 是惰性的,这一点非常不错。这意味着只在对数据库进行求值之后才会对它们执行查询,这会比立即执行查询的速度更快。 这种惰性利用了 Python 的分片(slicing)功能。下面的代码并没有先请求所有的记录,然后对所需要的记录进行分片,而是在实际的查询中使用了 5 作为 OFFSET、10 作为 LIMIT,这可以极大地提高性能。 清单 14. Python 分片>>> from jobs.models import Job >>> for job in Job.objects.all()[5:15] ... print job 注意:使用 清单 15. 统计记录数>>> from jobs.models import Job >>> print "Count = ", Job.objects.count() # GOOD! >>> print "Count = ", len(Job.objects.all()) # BAD! 有关的更多信息,请参阅 参考资料 部分给出的 Django “Database API reference” 的链接。 |
|