• Django中数据查询(万能下换线,聚合,F,Q)


    数据查询中万能的下划线基本用法:

             __contains: 包含
             __icontains: 包含(忽略大小写)
             __startswith: 以什么开头
             __istartswith: 以什么开头(忽略大小写)
             __endswith
             __iendswith
             __gt: 大于
             __gte: 大于等于
             __lt: 小于
             __lte: 小于等于
             __rang: 范围
                       models.Book.objects.filter(pub_date__range=('2015-01-01','2016-01-01'))
             __isnull: 判断是否为空
             __regex: 正则匹配
                       Entry.objects.get(title_regex=r'^(An|The) +')
             __regex: 不区分大小写的正则匹配
                       Entry.objects.get(title_regex=r'^(an|the) +')
    models.Book.objects.exclude(price=None):反查询

    聚合:

             from django.db.models import Avg,Max,Mix,Sum,Count
             Book.objects.all().aggregate(Avg('price')
             models.Book.objects.values('publisher__name').annotate(Count('id'))
             models.Book.objects.values('publisher__name').annotate(Avg('price'))
             models.Book.objects.filter(name_contains='J',pub_date__year='2016')
    

    Q 语句:

             默认是AND

             >>> from django.db.models import Q

             >>> Q(put_date__year = '2016')

             <Q: (AND: ('put_date__year', '2016'))>

            

             AND

             >>> Q(put_date__year =2016) , Q(put_date__year=2018)

             (<Q: (AND: ('put_date__year', 2016))>, <Q: (AND: ('put_date__year', 2018))>)

            

             加个| 为or的意思

             >>> Q(put_date__year =2016)|Q(put_date__year=2018)

             <Q: (OR: ('put_date__year', 2016), ('put_date__year', 2018))>

            

             ~ 为取非

             >>> Q(put_date__year =2016)| ~ Q(put_date__year=2018)

             <Q: (OR: ('put_date__year', 2016), (NOT (AND: ('put_date__year', 2018))))>

            

             AND和OR

             >>> Q(put_date__year =2016) , Q(put_date__year=2018)| Q(put_date__year=2019)

             (<Q: (AND: ('put_date__year', 2016))>, <Q: (OR: ('put_date__year', 2018), ('put_date__year', 2019))>)

            

             在生成条件语句后利用filter来进行查询

             q = Q(put_date__year =2016)|Q(put_date__year=2018)

             models.Book.objects.filter(q)

       

    from django.db.models import Q    # 导入Q
    con = Q()   # 创建Q对象
    
    q1 = Q()    
    q1.connector = 'OR'      # q1的元素为OR或的关系
    q1.children.append(('id', 1))
    q1.children.append(('id', 10))
    q1.children.append(('id', 9))
    
    q2 = Q()
    q2.connector = 'OR'      # q2的元素为OR或的关系
    q2.children.append(('c1', 1))
    q2.children.append(('c1', 10))
    q2.children.append(('c1', 9))
    
    con.add(q1, 'AND')      # 将q1添加到con对象中,与其他的Q为且的关系
    con.add(q2, 'AND')
    
    models.Tb1.objects.filter(con)   #将总的Q对象添加到model的查找条件中
    

      

    F 语句:

            

             自修改

             本表内两个字段比较

             字段数据迁移

            

             from django.db.models impport F

            

             1.先查看所有的商品价格

             models.Book.objects.values('price')

             2.所有商品价格+10

             models.Book.objects.update(price=F('price')+10)

            

             # 本表内两个字段比较

             models.Book.objects.filter(num1__get= F('num2'))  # 仅仅为例子

            

             # 表内字段数据迁移

             1.memo字段默认为空,把memo字段设为为同表中的name字段的值

             models.Book.objects.update(memo=F('name'))

             2.models.Book.objects.values('memo,name')

            

             

    最新内容可以看我的blog: 40kuai
  • 相关阅读:
    201521123104《Java程序设计》第7周学习总结
    201521123104 《Java程序设计》第6周学习总结
    201521123104 《Java程序设计》第5周学习总结
    201521123104《Java程序设计》第4周学习总结
    201521123104《JAVA程序设计》第三周学习总结
    201521123104 《JAVA程序设计》第二周学习总结
    201521123103 《java学习笔记》 第十二周学习总结
    201521123103 《Java学习笔记》 第十一周学习总结
    201521123103 《java学习笔记》 第十周学习总结
    201521123103 《Java学习笔记》 第九周学习总结
  • 原文地址:https://www.cnblogs.com/40kuai/p/6952051.html
Copyright © 2020-2023  润新知