zoukankan      html  css  js  c++  java
  • 05-Django模型(2)

    1、特殊查询

      F和Q查询:

          之前的查询都是模型对象的属性与常量值比较,两个属性怎么比较呢?使用F查询。

    F查询语法:

    from django.db.models import F
    
    F('属性名称')

    F查询要求

    # 1.查询id大于价格的书籍
    # 2.查询价格大于2倍id的书籍
    1.查询id大于价格的书籍
        book = Books.objects.all()
        book1 = book.filter(id__gt=F("price"))
        print(book1)
    2.查询价格大于2倍id的书籍
        book = Books.objects.all()
        book1 = book.filter(price__gt=F("id")*2)
        print(book1)

     3、查询价格大于52,并且author_id小于3的图书

        book = Books.objects.all()
        book1 = book.filter(price__gt=52,author_id__lt=3)
        print(book1)
    book1 = book.filter(price__gt=52).filter(author_id__lt=3)

    Q查询

      Q查询语法:

    from django.db models import Q
    
    Q(模型属性1_条件运算符=值)|Q(模型属性2_条件运算符=值)
    
    #(~非)
    # 1.查询价格大于20,或id小于3的图书
    # 2.查询id不等于3的书籍
    1.查询价格大于20,或id小于3的图书
        book = Books.objects.all()
        book1 = book.filter(Q(price__gt=52)|Q(id__lt=3))
        print(book1)
     2.查询id不等于3的书籍(Q对象可以使用~非还有|或)
        book = Books.objects.all()
        book1 = book.filter(~Q(id=3))
        print(book1)

    聚合函数

      使用aggregate()过滤器调用聚合函数,返回特定的对象。聚合函数包括AvgMaxMinSumCount(使用Count时,一般不需要aggregate()过滤器,直接调用即可),聚合函数被定义在django.db.models中。

    1、统计总的价格数
        book = Books.objects.all()
        price_sum = book.aggregate(Sum("price"))
        print(price_sum)
    
    

    关联查询

        基础关联查询

    
    
    # 1.查询id为1的作者出版的书籍信息
    # 2.查询id为2的书籍的作者信息
    
    
    1.查询id为1的作者出版的书籍信息
        author = Authors.objects.get(pk=1)
        #书籍的外键是作者,因此先查询到pk=1的作者,然后再查书籍
        #由于书与作者是多对一,当由一去找多的时候,
        # 需要将多的类名小写在加_set在加上全部的
        book = author.books_set.all()
        print(book)
    2.查询id为2的书籍的作者信息
        #先查出pk=2的这本书籍,再去查对应的作者
        book = Books.objects.get(pk=2)
        #查对应的作者  由于是多对一查找,直接点外键名就可以查出相关信息
        auth = book.author
        print(auth)

    总结:当书籍的外键是作者的时候,

    查询规则:

        多查一:(将书本查出来:直接将对象点外键对象就可以查出来)

       一查多:(将作者查出来:直接将作者对象点关联模型类类名小加_set即可查出)

      内连接查询(inner join)

      语法:

    filter(关联模型类类名小写__属性名__运算符=值)
    #例:filter(books__name="与时间做朋友")

      需求:

    # 1.查询作者为"何帆"的所有书籍信息
    # 2.查询作者的书籍中描述包含"时间"的作者
    1.查询作者为"何帆"的所有书籍信息
        #1.查询作者为"何帆"的所有书籍信息
        #01第一步我们可以先查书在过滤作者,由于是多找一,直接外键对象名加__属性名=“”
        auth = Books.objects.filter(author__name="何帆")
        print(auth)
    2.查询作者的书籍中描述包含"时间"的作者
        #2.查询作者的书籍中描述包含"时间"的作者
        #先查询所有作者,在过滤出来关联书籍包含“时间”的信息
        #查询作者过滤书籍出来,是少查多,过滤规则是类模型名小写__属性名__条件名=“时间”
        auth = Authors.objects.filter(books__name__contains="时间")
        print(auth)

    总结关联查询:

        当查询多过滤少的时候filter(外键对象名__属性名__条件=“”)

        当查询少过滤条件是多的时候filter(模型类名小写__属性名__条件=‘’)

  • 相关阅读:
    临时文档
    栈与堆的区别及其探讨
    经典面试题(一)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
    牛顿迭代法求根
    背包问题---01背包|完全背包(装满背包的方案总数分析及实现)
    背包问题----完全背包(最优方案总数分析及实现)
    背包问题----完全背包(详解|代码实现|背包具体物品的求解)
    60行代码:Javascript 写的俄罗斯方块游戏
    同学们博客链接汇总
    (2015秋) 作业1:学生调研(总分10分)
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11655949.html
Copyright © 2011-2022 走看看