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



    F查询:

    在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。如果我们要对两个字段的值做比较,那该怎么做呢?

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

    1、查看评论数大于阅读数的书
     from django.db.models import F,Q
     print(models.Book.objects.filter(commentNum__gt=F("readNum")))
    2、修改操作也可以使用F函数,比如将id大于1的所有的书的价格涨价100元
    print(models.Book.objects.filter(nid__gt=1).update(price=F("price")+100))
    3、Django 支持 F() 对象之间以及 F() 对象和常数之间的加减乘除和取模的操作。
    # 查询评论数大于收藏数2倍的书籍
        models.Book.objects.filter(commnetNum__lt=F('keepNum')*2)
    Q查询:
    filter() 等方法中的关键字参数查询都是一起进行“AND” 的。 如果你需要执行更复杂的查询(例如OR 语句),你可以使用对象

    1、查询id大于1并且评论数大于100的书
     print(models.Book.objects.filter(nid__gt=1,commentNum__gt=100))
     print(models.Book.objects.filter(nid__gt=1).filter(commentNum__gt=100))
     print(models.Book.objects.filter(Q(nid__gt=1)&Q(commentNum__gt=100)))
    2、查询评论数大于100或者阅读数小于200的书
    print(models.Book.objects.filter(Q(commentNum__gt=100)|Q(readNum__lt=200)))
    Q 对象可以使用& 和| 操作符组合起来。当一个操作符在两个Q 对象上使用时,它产生一个新的Q 对象。
    3、查询年份等于2017年或者价格大于200的书
     print(models.Book.objects.filter(Q(publishDdata__year=2017)|Q(price__gt=200)))
    
    
    4、查询年份不是2017年或者价格大于200的书
    print(models.Book.objects.filter(~Q(publishDdata__year=2017)&Q(price__gt=200)))

    注意:

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

        bookList=models.Book.objects.filter(Q(publishDate__year=2016) | Q(publishDate__year=2017),
                                      title__icontains="python"
                                     )









  • 相关阅读:
    pygame学习笔记(6)——一个超级简单的游戏
    pygame学习笔记(4)——声音
    pygame学习笔记(5)——精灵
    pygame学习笔记(2)——从画点到动画
    pygame学习笔记(3)——时间、事件、文字
    pygame学习笔记(1)——安装及矩形、圆型画图
    pygame入门
    Pygame
    aes python加密
    php aes加密
  • 原文地址:https://www.cnblogs.com/shangping/p/11559860.html
Copyright © 2011-2022 走看看