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(),效果一样