首页 > 其他 > 详细

django orm 分组查询 F查询 Q查询

时间:2019-07-25 17:24:46      阅读:80      评论:0      收藏:0      [点我收藏+]

分组查询

  • 原生SQL:select avg(price) from book group by publish_id;

  • orm中的分组

    统计每个出版社出版的书籍的平均价格
    ret=models.Book.objects.values('publishs_id').annotate(a=Avg('price'))
    
    ret=models.Publish.objects.annotate(a=Avg('book__price')).values('a')
  • F查询与Q查询

    • F查询:自己单单里面的字段比较

      from django.db.models import F,Q
      # 点赞数大于评论数
      models.Book.objects.filter(good__gt=F('comment'))
      #  点赞数大于评论数+20
      models.Book.objects.filter(good__gt=F('comment')+20)
      # 让表里的字段price都加20
      models.Book.objects.all().update(price=F('price')+20)
    • Q查询:结合filter函数 和_gt lt等下划线方法一同使用

      # 评论数 点赞数都大于80的
      models.Book.objects.filter(good__gt=80,comment__gt=80)
      # 评论数大于等于80 或 点赞数大于等于80的
      models.Book.objects.filter(Q(good_gte=80)|Q(good_gte=80))
      
  • orm执行原生SQL语句

    models.Publish.objects.raw('select * from app01_publish;')  # <RawQuerySet: select * from app01_book>
  • 直接执行自定义的SQL语句

    from django.db import connection,connections
    cursor = connection.cursor()
    cursor.execute(sql,[1,])
    cursor.fetchall()
  • 展示SQL

    from django.db import connection
    print(connection.queries)
  • orm练习

    • 查询每个作者的姓名以及出版的书的最高价格

      ret = models.Author.objects.annotate(a=Max('book__price')).values('name','a')
    • 查询作者id大于2或者作者年龄大于等于20岁的女作者的姓名以及出版的书的最高价格

      ret = models.Author.objects.filter(Q(id__gt=2)|Q(age__gtq=20,sex='female')).annotate(a=Max('book__price')).values('name','a')
    • 查询每个作者出版的书的最高价格的平均值

      ret = models.Author.objects.annotate(a=Max('book__price')).aggregate(Avg('a'))

django orm 分组查询 F查询 Q查询

原文:https://www.cnblogs.com/he-qing-qing/p/11245471.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!