zoukankan      html  css  js  c++  java
  • 085:QuerySet API详解-defer和only

    QuerySet API详解-defer和only:

    defer :在一些表中,可能存在很多的字段,但是一些字段的数据量可能是比较庞大的,而此时你又不需要,比如我们在获取文章列表的时候,文章的内容我们是不需要的,因此这时候我们就可以使用 defer 来过滤掉一些字段。这个字段跟 values 有点类似,只不过 defer 返回的不是字典,而是模型。示例代码如下:

    articles = list(Article.objects.defer("title"))
    for sql in connection.queries:
      print('='*30)
      print(sql)

    在看以上代码的 sql 语句,你就可以看到,查找文章的字段,除了 title ,其他字段都查找出来了。当然,你也可以使用 article.title 来获取这个文章的标题,但是会重新执行一个查询的语句。示例代码如下:

    articles = list(Article.objects.defer("title"))
    for article in articles:
    # 因为在上面提取的时候过滤了title
    # 这个地方重新获取title,将重新向数据库中进行一次查找操作
      print(article.title)
    for sql in connection.queries:
      print('='*30)
      print(sql)

    defer 虽然能过滤字段,但是有些字段是不能过滤的,比如 id ,即使你过滤了,也会提取出来。

    only :跟 defer 类似,只不过 defer 是过滤掉指定的字段,而 only 是只提取指定的字段。

    实例代码和截图:

        # books = Book.objects.defer("name", "price")
        books = Book.objects.only("name", "price")
        for item in books:
            print(item.id, item.name)

  • 相关阅读:
    ANDROIDSTUDIO手动安装插件
    xcode 升级到最新的11.1版本打开项目卡顿解决方案
    OC各种数据类型之间的转换方法
    TOJ 3365 ZOJ 3232 It's not Floyd Algorithm / 强连通分量
    在linux下makefile的使用
    Binary Search二分法搜索C++程序
    ORA-01654错误
    合作版状态模式之设计
    基于FPGA的超声波测距(一)
    如何随机获取数据库不连续ID的数据?
  • 原文地址:https://www.cnblogs.com/zheng-weimin/p/10284352.html
Copyright © 2011-2022 走看看