• orm多表查询基于双下划线


        ###########基于双下划线的跨表查询(基于join实现的)#############
        key: 正向查询按字段,反向查询按表名小写
        1.查询python这本书出版社的名字
        ret = Book.objects.filter(title="python").values("publish__name")
        print(ret)
        ret = Publish.objects.filter(book__title="python").values("name")
        print(ret)
        2 查询苹果出版社出版的所有的书籍的名称
        ret = Publish.objects.filter(name="苹果出版社").values("book__title")
        print(ret)
        ret = Book.objects.filter(publish__name="苹果出版社").values("title")
        print(ret)
        3 查询python这本书籍的作者的年龄
        ret = Book.objects.filter(title="python").values("authors__age")
        print(ret)
        ret = Author.objects.filter(book__title="python").values("age")
        print(ret)
        4 查询alex出版过的所有的书籍名称
        ret = Author.objects.filter(name="alex").values("book__title")
        print(ret)
        ret = Book.objects.filter(authors__name="alex").values("title")
        print(ret)
        5 查询alex的手机号
        ret = Author.objects.filter(name="alex").values("ad__tel")
        print(ret)
        ret = AuthorDetail.objects.filter(author__name="alex").values("tel")
        print(ret)
        6 查询手机号为123的作者的名字
        ret = AuthorDetail.objects.filter(tel=123).values("author__name")
        print(ret)
        ret = Author.objects.filter(ad__tel=123).values("name")
        print(ret)
        ########## 连续跨表  ###############
        查询苹果出版社出版过的所有书籍的名字以及作者的姓名
        ret = Publish.objects.filter(name="苹果出版社").values("book__title","book__authors__name")
        print(ret)
        ret = Book.objects.filter(publish__name="苹果出版社").values("title","authors__name")
        print(ret)
        手机号以123开头的作者出版过的所有书籍名称以及出版社名称
        ret = AuthorDetail.objects.filter(tel__startswith=123).values("author__book__title","author__book__authors__name")
        print(ret)
        ret = Author.objects.filter(ad__tel__startswith=123).values("book__title","book__publish__name")
        print(ret)
        ############### 聚合 分组 ################
        查询所有书籍的平均价格
        ret = Book.objects.aggregate(ang_price=Avg("price"))
        print(ret)
        查询所有书籍的个数
        ret = Book.objects.aggregate(c=Count(1))
        print(ret)
        分组
        单表分组查询
        查询书籍表每一个出版社id以及对应的书籍个数
        key: annotate()前values哪一个字段就按哪一个字段group by
        ret = Book.objects.annotate(c=Count(1)).values("publish__nid","c")
        print(ret)
        查询每一个部门的名称以及对应员工的平均薪水
        ret = Emp.objects.values("dep").annotate(avg_salary=Avg("salary"))
        print(ret)
        查询每一个省份的名称以及对应的员工最大年龄
        ret = Emp.objects.values("pro").annotate(max_age=Max("age"))
        print(ret)
        ###单表按主键分组没有意义
        跨表分组查询
        查询每一个出版社的名称以及对应的书籍平均价格
        ret = Publish.objects.annotate(avg_price=Avg("book__price")).values("name","avg_price")
        print(ret)
        查询每一个作者的名字以及出版的书籍的最高价格
        ret = Author.objects.annotate(max_price=Max("book__price")).values("name","max_price")
        print(ret)
        查询每一个书籍的名称以及对应的作者的个数
        ret = Book.objects.annotate(c=Count("authors__pk")).values("title","c")
        print(ret)
        4 查询作者数不止一个的书籍名称以及作者个数
        ret = Book.objects.annotate(c=Count("authors__pk")).filter(c__gt=1).values("title","c")
        print(ret)
        5 根据一本图书作者数量的多少对查询集 QuerySet进行排序
        ret = Book.objects.annotate(c=Count("authors__pk")).order_by("c")
        print(ret)
        6 统计每一本以py开头的书籍的名称以及作者个数
        ret = Book.objects.filter(title__startswith="py").annotate(c=Count("authors__pk")).values("title","c")
        print(ret)
        ############### F 与 Q ################
        查询评论数大于100的所有的书籍名称
        ret = Book.objects.filter(comment_count__gt=100).values("title")
        print(ret)
        查询评论数大于2倍点赞数的所有的书籍名称
        ret = Book.objects.filter(comment_count__gt=F("poll_count")*2)
        print(ret)
        给每一本书籍的价格提升100
        Book.objects.update(price=F("price")+100)
        查询价格大于300或者评论数大于3000的书籍
        ret = Book.objects.filter(Q(price__gt=300)|Q(comment_count__gt=3000))
        print(ret)
  • 相关阅读:
    C#获取EF实体对象或自定义属性类的字段名称和值
    Android 短信广播接收相关问题
    Silverlight5 Tools安装失败及解决方案
    验证码刷新
    Silverlight动态生成控件实例
    spring 属性注入
    asp.net XMLHttpRequest 进度条以及lengthComputable always false的解决办法
    Spring.Net 初探之牛刀小试
    iframe载入页面过程显示动画效果
    一次让人晕到吐血的接包经历
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9858449.html
Copyright © 2020-2023  润新知