zoukankan      html  css  js  c++  java
  • django ORM操作之Q查询两种用法

     第一种用法:

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

    示例1:

    查询作者名是小仙女或小魔女的

    models.Book.objects.filter(Q(authors__name="小仙女")|Q(authors__name="小魔女"))
    你可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询。

    示例:查询作者名字是小仙女并且不是2018年出版的书的书名。

    >>> models.Book.objects.filter(Q(author__name="小仙女") & ~Q(publish_date__year=2018)).values_list("title") <QuerySet [('番茄物语',)]>
    查询函数可以混合使用Q 对象和关键字参数。所有提供给查询函数的参数(关键字参数或Q 对象)都将"AND”在一起。但是,如果出现Q 对象,它必须位于所有关键字参数的前面。

    例如:查询出版年份是2017或2018,书名中带物语的所有书。

    >>> models.Book.objects.filter(Q(publish_date__year=2018) | Q(publish_date__year=2017), title__icontains="物语") <QuerySet [<Book: 番茄物语>, <Book: 香蕉物语>, <Book: 橘子物语>]>
    第二种用法:

    传Q对象,构造搜索条件

    首先还是需要导入模块:

    from django.db.models import Q
    传入条件进行查询:

    q1 = Q()
    q1.connector = 'OR' #默认为and
    q1.children.append(('id', 1))
    q1.children.append(('id', 2))
    q1.children.append(('id', 3))

    models.Book.objects.filter(q1)

  • 相关阅读:
    5G NR:MAC 子层
    无线接口架构:PHY
    NR 演进之路: NR设计
    What is 5G Massive MIMO?
    CQI MCS 调度关系
    ubuntu离线安装mysql
    如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
    Java调用CMD命令
    文件和byte数组之间相互转换
    Java中两个或多个byte数组合并及int类型转数组
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/12869970.html
Copyright © 2011-2022 走看看