py18_03:ORM之获取数据的常用方法

 ORM模型:Django从数据库获取数据的常用方法,有以下几个:

get:返回表中满足条件的一条数据,且只能有一条。
all:返回模型类的表的所有数据
filter:返回满足条件的数据
exclude:返回不满足条的数据
order_by:参数中根据字段排序

 

1.get方法,条件必须唯一,可带默认值None。

 

 

 

 

 3,filter与get的区别。filter可以多条件查询,也可以模糊查询。

 

模糊条件查询:
BookInfo.objects.filter(btitle='龙的传人')
BookInfo.objects.filter(btitle__contains='')
BookInfo.objects.filter(btitle__startswith='')
BookInfo.objects.filter(btitle__endswith='')
BookInfo.objects.filter(btitle__isnull=False) BookInfo.objects.filter(id__in=[1,3,5]) BookInfo.objects.filter(id__gt=3) BookInfo.objects.filter(id__lt=3) BookInfo.objects.filter(id__lte=3)

根据时间模糊匹配
BookInfo.objects.filter(bpub_date__year=1980) # year,month等

from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1991.1.1))

 

3.exclude,与条件相反的

BookInfo.objects.exclude(id=3)  # id !=3

 

4.order_by排序。

用法:首先根据你要排序的内容查找出来,然后再排序。

BookInfo.objects.all().order_by('id')   # 根据全部,然后升序(可以用filter查找其他条件) 条件为all()时可以省略。效果一样

BookInfo.objects.all().order_by('id')   # 根据全部,然后反序

 

Q对象

上面的都是单条件的查询,如果是多条件的查询。我们就要用到Q对象 

Q对象用法,在条件前面+Q,条件则用()包起来。然后运用关系逻辑符号。&,|
BookInfo.objects.filter(id__gt=3,bpub_date__year=2020) @且关系,可以直接用逗号。但或,非关系的话,就要用到Q对象了。 BookInfo.objects.filter(Q(id__gt=3)&Q(bpub_date__year=2020)) BookInfo.objects.filter(Q(id__gt=3)|Q(bpub_date__year=2020))
非,条件:在Q的前面加~
BookInfo.objects.filter(~Q(id__gt=3)|~Q(bpub_date__year=2020))

 

F对象

 

 

 

 

聚合函数

用法:一样的先把要聚合的对象找出来。下面就用all()作为条件。all()条件一般都是可以省略的

 

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

BookInfo.objects.all().aggregate(聚合条件) BookInfo.objects.all().
aggregate(count('id'))
BookInfo.objects.all().aggregate(Sum('id')
BookInfo.objects.all().aggregate(Max('id')
BookInfo.objects.all().aggregate(Min('id')


此处,这里条件全部用id,可以用其他不同数据作为条件的

另外,区别于count,有个单独的count方法。我们可以直接调用
BookInfo.objects.all().count()  可以直接得到数据
BookInfo.objects.count()    省略all(),效果一样

 

 

 

 

posted on 2020-04-01 14:42  yeyu1314  阅读(724)  评论(0)    收藏  举报