zoukankan      html  css  js  c++  java
  • F查询与Q查询

    F查询

    如果我们要对两个字段的值做比较,那该怎么做呢?

    Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

    # 查询评论数大于收藏数的书籍
     
       from django.db.models import F
       Book.objects.filter(commnetNum__gt=F('keepNum'))

     Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。

    # 查询评论数大于收藏数2倍的书籍
        Book.objects.filter(commnetNum__gt=F('keepNum')*2)

    修改操作也可以使用F函数,比如将每一本书的价格提高30元:

    Book.objects.all().update(price=F("price")+30) 

    Q查询

    filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR 语句),你可以使用对象。

    Q 对象可以使用& 和| 操作符组合起来。当一个操作符在两个Q 对象上使用时,它产生一个新的Q 对象。

    from django.db.models import Q
    bookList=Book.objects.filter(
      Q(authors__name="yuan")|Q(authors__name="egon")) #等同于WHERE name ="yuan" OR name ="egon"

    你可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:

    bookList=Book.objects.filter(
      Q(authors__name="yuan") & ~Q(publishDate__year=2017)).values_list("title")

    查询函数可以混合使用Q 对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。例如:

    bookList=Book.objects.filter(Q(publishDate__year=2016) | Q(publishDate__year=2017),
            title__icontains
    ="python")
  • 相关阅读:
    JS常用的技术
    高性能Javascript总结
    一行JS搞定快速关机
    js如何调用电脑的摄像头
    jquery.qrcode.min.js生成二维码
    Python批量修改文件名
    第5章 引用类型---JS红宝书书摘系列笔记
    SQL Server 2008添加字段成功,但提示列名无效
    第4章 变量、作用域和内存---JS红宝书书摘系列笔记
    基于Hbuilder的快捷键使用
  • 原文地址:https://www.cnblogs.com/yuliangkaiyue/p/9937327.html
Copyright © 2011-2022 走看看