查询
一、如何查看mysql的日志文件
1、使用下面的命令打开mysql的配置文件,去除地68,69行的注释,然后保存。
sudu 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
save ------>生成insert、update语句
delete -------->生成delete语句
get all--------->生成select语句
查询函数:
模型类.objects
函数名 | 功能 | 返回值 | 说明 |
get | 返回表中满足条件的一条且只能有一条数据 | 返回值是一个模型类对象 |
参数中写查询条件 1、如果查到多条数据,则抛异常MultipleObjectsReturned. 2、查询不到数据,则抛异常:DoesNotExist. |
all | 返回模型类对应表格中的所有数据 | 返回值是QuerySet类型 | 查询集,可遍历 |
filter | 返回满足条件的数据 | 返回值是QuerySet类型 | 参数写查询条件 |
exclude | 返回不满足条件的数据 | 返回值是QuerySet类型 | 参数写查询条件 |
order_by | 对查询结果进行排序 | 返回值是QuerySet类型 | 参数中写根据哪些字段进行排序 |
条件格式:
模型类属性__条件名=值
判等 条件名:exact
例:BookInfo.objects.get(id=1)
模糊查询
例:查询书名包含‘传’的图书。 contains
BookInfo.objects.filter(btitle__contains='传')
例:查询书名以‘部’结尾的图书endswith 开头:startswith
BookInfo.objects.filter(btitle__endswith='传')
空查询 isnull
例:查询书名不为空的图书。isnull
BookInfo.objects.filter(btitle__isnull=False)
范围查询 in
例:查询id为1或3或5的图书。
BookInfo.objects.filter(id__in=[1,3,5])
比较查询 gt(greate than) 大于 lt(less than)小于 gte(equal) 大于等于 lte 小于等于
例:查询编号大于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))
exclude方法示例:
例:查询id不为3的图书信息。
BookInfo.objects.exclude(id=3)
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')
Q对象
作用:用于查询时条件之间的逻辑关系。not and or ,可以对Q对象进行&|-操作。
使用之前需要导入:
from django.db.models import Q
例:查询id大于3且阅读量大于30的图书的信息。
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))
F对象
作用:用于类属性之间的比较。
使用之前需要先导入:
from django.db.models import F
例:查询图书阅读量大于评论量图书信息。
BookInfo.objects.filter(bread__gt=F('bcomment'))
例:查询图书阅读量大于2倍评论量图书信息。
BookInfo.objects.filter(bread__gt=2*F('bcomment'))
聚合函数
sum count avg max min
aggregate:调用这个函数来使用聚合。返回值是一个字典。
使用前需先导入聚合类
from django.db.models import Sum,Count,Max,Min,Avg
例:查询所有图书的数据
BookInfo.objects.all().aggregate(Count('id'))
例:查询所有图书阅读量的总和
BookInfo.objects.all().aggregate(Sum('bread'))
count函数 返回值是一个数字
作用:统计满足条件数据的数目
例:统计所有图书的数目。
BookInfo.objects.all().count()
BookInfo.objects.count()
例:统计id大于3的所有图书的数目。
BookInfo.objects.filter(id__gt=3).count()
查询集
all,filter,exclude,order_by 调用这些函数会产生一个查询集,QuerySet类对象可以继续调用上面的所有函数。
查询集特性:
1、惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询。
2、缓存:当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个查询集时,使用的是缓存中的结果。
限制查询集:
可以对一个查询集进行取下标或者切片操作来限制查询集的结果。
对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。
取出查询集第一条数据的两种方式:
方式 | 说明 |
b[0] | 如果b[0]不存在,会抛出IndexError异常。 |
b[0:1].get() | 如果b[0:1].get()不存在,会抛出DoesNotExist异常。 |
exists:判断一个查询集中是否有数据:True False