zoukankan      html  css  js  c++  java
  • Django Mysql数据库-F查询和Q查询

    一、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"
                                     )
    
    
    
     



     





  • 相关阅读:
    作业程序
    第十三周完成情况 学生选课管理系统 王杰 孙乾 蔚晓青
    各周任务
    课程设计 学生选课管理 王杰 孙乾 蔚晓青
    第六次作业
    第五次作业
    第四次笔记
    第三次作业
    第二周学习笔记
    JAVA作业
  • 原文地址:https://www.cnblogs.com/Paul-watermelon/p/10517083.html
Copyright © 2011-2022 走看看