zoukankan      html  css  js  c++  java
  • django数据查询之F查询和Q查询

    仅仅靠单一的关键字参数查询已经很难满足查询要求。此时Django为我们提供了F和Q查询:

     1 # F 使用查询条件的值,专门取对象中某列值的操作
     2 
     3     # from django.db.models import F
     4     # models.Tb1.objects.update(num=F('num')+1)
     5 
     6 
     7 # Q 构建搜索条件
     8     from django.db.models import Q
     9 
    10     #1 Q对象(django.db.models.Q)可以对关键字参数进行封装,从而更好地应用多个查询
    11     q1=models.Book.objects.filter(Q(title__startswith='P')).all()
    12     print(q1)#[<Book: Python>, <Book: Perl>]
    13 
    14     # 2、可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
    15     Q(title__startswith='P') | Q(title__startswith='J')
    16 
    17     # 3、Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合
    18     Q(title__startswith='P') | ~Q(pub_date__year=2005)
    19 
    20     # 4、应用范围:
    21 
    22     # Each lookup function that takes keyword-arguments (e.g. filter(),
    23     #  exclude(), get()) can also be passed one or more Q objects as
    24     # positional (not-named) arguments. If you provide multiple Q object
    25     # arguments to a lookup function, the arguments will be “AND”ed
    26     # together. For example:
    27 
    28     Book.objects.get(
    29         Q(title__startswith='P'),
    30         Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
    31     )
    32 
    33     #sql:
    34     # SELECT * from polls WHERE question LIKE 'P%'
    35     #     AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
    36 
    37     # import datetime
    38     # e=datetime.date(2005,5,6)  #2005-05-06
    39 
    40     # 5、Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。
    41     # 正确:
    42     Book.objects.get(
    43         Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
    44         title__startswith='P')
    45     # 错误:
    46     Book.objects.get(
    47         question__startswith='P',
    48         Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))

     参考来源:https://www.cnblogs.com/liuwchao/articles/9831942.html

  • 相关阅读:
    Base64字符串在传递过程中加号被转成空格
    IIS无法启动,应用程序池自动关闭,应用程序池XXXX将被自动禁用 解决方案之一
    我要写程序我要写程序
    react native项目改名(仅针对android)
    webpack之html-webpack-plugin的使用
    webpack之React开发环境配置
    webpack之webpack-dev-server的使用
    html2canvas截图空白问题
    webpack源码分析——参数初始化
    webpack源码分析——配置调试环境
  • 原文地址:https://www.cnblogs.com/jiarenanhao/p/9983893.html
Copyright © 2011-2022 走看看