美文网首页
Model ORM总结

Model ORM总结

作者: 葡萄柚子茶 | 来源:发表于2019-09-27 17:00 被阅读0次

    1.get-返回表中满足条件的一条并且只能有一条数据,返回值是对象
    参数中写查询条件。

    1. 如果查到多条数据,则抛异常MultipleObjectsReturned。
    2. 查询不到数据,则抛异常:DoesNotExist。
    #例:查询编号为1的图书。
    BookInfo.objects.get(id=1)
    

    2.all-返回模型类对应表中的所有数据,返回值是Queryset
    3.filter-返回满足条件的所有数据,返回值是Queryset
    参数写查询条件

    模糊查询(相当于sql的 like)
    #例:查询书名包含'传'的图书。contains
    BookInfo.objects.filter(btitle__contains='传')
    #例:查询书名以'部'结尾的图书 endswith 开头:startswith
    BookInfo.objects.filter(btitle__endswith='部')
    
    
    空查询 isnull
    #例:查询书名不为空的图书。isnull 
    select * from booktest_bookinfo where btitle is not null;
    BookInfo.objects.filter(btitle__isnull=False)
    
    
    范围查询 in
    #例:查询id为1或3或5的图书。
    select * from booktest_bookinfo where id in (1,3,5);
    BookInfo.objects.filter(id__in = [1,3,5])
    
    
    比较查询 gt(greate than) lt(less  than) gte(equal) 大于等于
    #lte 小于等于
    #例:查询id大于3的图书。
    Select * from booktest_bookinfo where id>3;
    BookInfo.objects.filter(id__gt=3)
    
    日期查询
    #例:查询1980年发表的图书。
    BookInfo.objects.filter(bpub_date__year=1980)
    #例:查询1980年1月1日后发表的图书。
    from datetime import date
    BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))
    
    

    4.exclude-返回不满足条件的数据,返回值是Queryset
    参数写查询条件

    exclude方法示例:
    #例:查询id不为3的图书信息。
    BookInfo.objects.exclude(id=3)
    
    

    5.order_by-对查询结果进行排序

    order_by方法示例:
    作用:进行查询结果进行排序。默认是升序,在条件里加“-”表示降序
    #例:查询所有图书的信息,按照id从小到大进行排序。
    BookInfo.objects.all().order_by('id')
    #例:查询所有图书的信息,按照id从大到小进行排序。
    BookInfo.objects.all().order_by('-id')
    #例:把id大于3的图书信息按阅读量从大到小排序显示。
    BookInfo.objects.filter(id__gt=3).order_by('-bread')
    

    6.F对象

    作用:用于类属性(字段)之间的比较。

    使用之前需要先导入:
    
    from django.db.models import F
    
    #例:查询图书阅读量大于评论量图书信息。
    
    BookInfo.objects.filter(bread__gt=F('bcomment'))
    
    #例:查询图书阅读量大于2倍评论量图书信息。
    
    BookInfo.objects.filter(bread__gt=F('bcomment')*2)
    
    1. Q对象
    作用:用于查询时条件之间的逻辑关系。not and or,可以对Q对象进行 & | ~ 操作。
    
    使用之前需要先导入:
    
    from django.db.models import Q
    
    例:查询id大于3且阅读量大于30的图书的信息。
    
    BookInfo.objects.filter(id__gt=3, bread__gt=30)  # filte() 中多个条件表示 "且" ,但要用到"或",就用到 Q 对象
    
    BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30))
    
    例:查询id大于3或者阅读量大于30的图书的信息。
    
    BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))
    
    例:查询id不等于3图书的信息。
    
    BookInfo.objects.filter(~Q(id=3))
    
    1. 聚合函数

    作用:对查询结果进行聚合操作。

    sum count avg max min

    aggregate:调用这个函数来使用聚合。 返回值是一个字典

    使用前需先导入聚合类:

    from django.db.models import Sum,Count,Max,Min,Avg

    #例:查询所有图书的数目。
    
    BookInfo.objects.all().aggregate(Count('id'))
    
    {'id__count': 5}
    
    #例:查询所有图书阅读量的总和。
    
    BookInfo.objects.aggregate(Sum('bread'))
    
    {'bread__sum': 126}
    
    count函数 返回值是一个数字
    
    作用:统计满足条件数据的数目。
    
    #例:统计所有图书的数目。
    
    BookInfo.objects.all().count()
    
    BookInfo.objects.count()
    
    #例:统计id大于3的所有图书的数目。
    
    BookInfo.objects.filter(id__gt=3).count()
    

    9.关联查询
    由一类的对象查询多类的时候:
    反向查询,模型中定义了related_name用related_name查

    一类的对象.多类名小写_set.all() #查询所用数据

    由多类的对象查询一类的时候:

    多类的对象.关联属性 #查询多类的对象对应的一类的对象

    由多类的对象查询一类对象的id时候:

    多类的对象. 关联属性_id

    关联查询
    (1)通过模型类实现关联查询时,要查哪个表的数据,就通过哪个类来查
    (2)写关联查询条件时,如果类中没有关系属性,条件需要哪些对应类的名,如果类中有关系属性,直接写关系属性

    #例:查询图书信息,要求图书关联的英雄的描述包含'八'。
    
    BookInfo.objects.filter(heroinfo__hcomment__contains='八')
    
    #例:查询图书信息,要求图书中的英雄的id大于3.
    
    BookInfo.objects.filter(heroinfo__id__gt=3)
    
    #例:查询书名为“天龙八部”的所有英雄。
    
    HeroInfo.objects.filter(hbook__btitle='天龙八部')
    
    #通过多类的条件查询一类的数据:
    
        一类名.objects.filter(多类名小写__多类属性名__条件名)
    
    #通过一类的条件查询多类的数据:
    
        多类名.objects.filter(关联属性__类属性名__条件名)
    

    相关文章

      网友评论

          本文标题:Model ORM总结

          本文链接:https://www.haomeiwen.com/subject/pxrauctx.html