Django学习到查询数据表的时候,遇到了queryset这个东西,他呢就是通过查询得到的一个结果对象,起初或许是我当时没有好好听课,时候才发现对于这一块有点迷茫,自己尝试了好多次,通过print打印输出了好几次都不知道为什么通过for来遍历他会得到相对应的值,期间也问过同学,多多少少明白了点…不过还是处于迷茫的状态…
不弄懂这个心理实属难受,于是去百度Google查询了一下答案,突然发现这个queryset是一个可迭代的,这样一来所有的困惑都解决了,既然是一个可迭代的,那么通过for来对它进行遍历就可以理解了。
除此之外还了解到了他的一些特性:
- QuerySet是延迟获取的,只有当用到这个QuerySet时,才会查询数据库求值,也就是说,在我们使用objects.all()、objects.filter()..的时候并没有去真正的查询数据库,而是当我们对queryset进行遍历、序列化、if的情况下才会对数据库进行查询,还有就是使用切片时使用了步进值的情况下也会对数据库进行查询
- 还有就是他的缓存机制:使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。