Django的模型查询相关函数(第七天)
启用mysql日志
修改mysql的日志文件:
让其产生mysql.log,即是mysql的日志文件,里面记录的对mysql数据的操作记录。
1.使用下面命令打开mysql的配置文件,去除68,69行注释,然后保存:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2.重启mysql服务,就会产生mysql日志文件:
sudo service mysql restart
3.打开Mysql的日志文件
/var /log/mysql/mysql.log 是mysql日志文件所在位置
使用下面命令可以实时查看mysql的日志文件:
sudo tail -f /var/log/mysql/mysql.log
查询函数
get方法
b=BookInfo.objects.get(id=1)
或者BookInfo.objects.get(id_exact=1)
返回表中满足条件的一条数据,满足条件的有多条数据就需要用filter函数
如果返回得不到数据会抛出异常信息DoesNotExist
如果返回得到不止一条数据会抛出异常信息MultileObjectsReturned
all方法
b=BookInfo.objects.all()
查询结果是一个查询集,可以遍历
filter方法
BookInfo.objects.filter(btitle__contains=‘传’)
模糊查询,书名中包含“传”的
BookInfo.objetcs.fliter(btitle__startwith=‘大’)
查询书名以大开头的,endwith,以什么结尾的模糊查询。
Bookinfo.objects.filter(btitle__isnull=False)
图书名不为空的查询
Bookinfo.objects.filter(id__in=[1,3,5])
查询图书id为1或3或5
BookInfo.objects.fliter(id__gt=3)
查询图书编号大于3的,gt大于,lt小于,gte大于等于,lte小于等于
BookInfo.objects.fliter(bpub_date__year=1980)
查询1980年的图书
BookInfo.objects.fliter(bpub_date__month=5)
查询5月的图书
BookInfo.objects.fliter(bpub__date__gt=date(1980,1,1))
查询1980年1月1日以后的图书
BookInfo.objects.exclude(id=3)
查询id不等于3的图书信息
BookInfo.objects.all().order_by(‘id’)
查询所有图书的结果,按照id升序排序,如果要降序就在id前面加-号
Q对象
作用:对于查询时条件之间的关系。not and or,可以对Q对象进行&|~操作
from django.db.models import Q
BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))
查询图书id号大于3或者阅读量大于30的数据
F对象
用于类属性之间的比较,以上的都是与值进行比较
使用之前需要先导入
from django.db.models import F
查询阅读量大于评论量的图书
BookInfo.objects.fliter(bread__gt=F(‘bcomment’))
查询阅读量大于两倍评论量的图书信息
BookInfo.objects.fliter(bread__gt=F(‘bcomment’)*2)
聚合函数
作用:对查询结果进行聚合操作
sum count avg max min
aggregate:调用这个函数来使用聚合,返回值是一个字典
使用前需要先导入聚合类:
from django.db.models import Sum,Count,Max,Min,Avg
查询所有图书的数目
BookInfo.objects.all().aggregate(Count(‘id’))
查询所有图书的阅读量的总和
BookInfo.objects.aggregate(Sum(‘bread’))
查询返回数据的数量值
BookInfo.objects.all().count()
查询集
查询集特性:
1.惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询
2.缓存:当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果
限制查询集:
可以对一个查询集进行取下标或者切片操作来限制查询集的结果,下标不允许为负数
取出查询集第一条数据的两种方式:
b[0] : 如果b[0]不存在,会抛出IndexError异常
b[0:1].get() : 如果b[0:1].get()不存在,会抛出DoesNotExist异常
exists:判断一个查询集中是否有数据。返回Ture False
b = BookInfo.objects.all()
b2 = b[0:0]
b2.exists()