QuerySet与惰性机制

所谓惰性机制:Publisher. s.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。
QuerySet特点:

  • 可迭代的

  • 可切片

  • 惰性计算和缓存机制

    def queryset(request):
    books=models.Book. s.all()[:10] #切片 应用分页
    books = models.Book. s.all()[::2]
    book= models.Book. s.all()[6] #索引
    print(book. )
    for obj in books: #可迭代
    print(obj. )
    books=models.Book. s.all() #惰性计算—>等于一个生成器,不应用books不会执行任何SQL操作
    #query_set缓存机制1次数据库查询结果query_set都会对应一块缓存,再次使用该query_set时,不会发生新的SQL操作;
    #这样减小了频繁操作数据库给数据库带来的压力;
    authors=models.Author. s.all()
    for author in authors:
    print(author.name)
    print(’-------------------------------------’)
    models.Author. s.filter(id=1).update(name=‘张某’)
    for author in authors:
    print(author.name)
    #但是有时候取出来的数据量太大会撑爆缓存,可以使用迭代器优雅得解决这个问题;
    models.Publish. s.all().iterator()
    return HttpResponse(‘OK’)

收藏 打印