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(模型类名小写__属性名__条件=‘’)

  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/lishuntao/p/11655949.html
Copyright © 2011-2022 走看看