zoukankan      html  css  js  c++  java
  • Django QuerySet缓存和惰性机制

    惰性机制:

        在内部。QuerySet在构造,过滤,切片,传递的时候通常查询集不会真正的去数据库查询

           那它会在什么情况下去数据库查询呢?

                    1.迭代(通过循环将值一个个拿出来)

                    2.切片,使用切片语法的step(步长切片)参数,或者是切片只切出一个元素的时候,Django将执行数据库查询,

                    3.直接在控制台打印的时候

                    4.使用len()方法获取长度的时候,底层调用count

                    5.使用list()方法转换类型

                    6.通过if,else去判断是否为空的时候

                    7. 序列化缓存,把查询集的内容存在reis或者内存中

         解释完惰性机制,在来说说缓存,只要重复利用好这个特性,将会提高代码的质量

               1.会在什么时候缓存呢?

                        在只执行一个QuerySet的时候,将会将查询结果缓存在这个对象,后面再查询这个QuerySet,会从缓存中获取,而不去数据库

                        值得注意的是,在新创建的QuerySet的缓存中,缓存是空的

    users = User.objects.all()
    for item in users:
        print(item.mobile) 
    
    users.mobile

        2.什么时候不缓存

                    a.使用数组切片或者索引不会缓存

                    b.简单的打印不缓存   

    users = User.objects.all()
    print(users[0].mobile) # 这种情况是不会缓存的
  • 相关阅读:
    Web功能测试常用方法
    linux常用指令集说明
    Linux常用指令集
    Web测试
    APP常用测试方法总结
    软件测试笔试题初级篇
    Java 接口自动化系列--用例类之BaseCase 基础父类
    Java + Selenium 系列之失败操作截图及调用
    Java + Selenium 系列之Allure报告集成
    Java 接口自动化系列--工具类之数据库连接与操作
  • 原文地址:https://www.cnblogs.com/Sun-MyBlog/p/12208447.html
Copyright © 2011-2022 走看看