1、单表操作的其他事项(接上)

1、 在创建表的那个类中,其拥有的objects里提供了各种管理数据表的方法,上一节也提到过objects中添加数据和查询数据等操作。
注: 类中的__str__()方法,在类中重写此方法以后,如果再调用print()函数打印对象时,直接打印的是此函数的返回值。
2、 单表查询常用的API

  1. all():调用者objects管理器,返回queryset
  2. filter():调用者objects管理器,返回queryset
  3. get():调用者objects管理器,返回查询到model对象,(查询结果有且只有一个)
  4. first():调用者queryset,返回model对象
  5. exclude():调用者objects管理器,返回queryset
  6. order_by():排序 由queryset调用,返回值是queryset
  7. count():计数 由queryset调用,返回值是int
  8. reverse():由queryset调用,返回值是queryset
  9. exists():由queryset调用,返回值是bool值
  10. values():由queryset对象调用,返回值是queryset
  11. values_list():由queryset调用,返回值是queryset
  12. distinct():去重,由queryset调用,返回值是queryset

2、模糊查询

模糊查询异常情况的处理

如果在表中查询满足某个时间点的东西时,查询结果为空,则需要在setttings.py模块中将USE_TZ=True改为USE_TZ=False;
实例:

data = Book.objects.filter(pub_date__year=2018,pub_date__month=7) #若查询结果为空,则需要在setttings.py模块中将USE_TZ=True改为USE_TZ=False
print(data) 
模糊查询

模糊查询的方式比较简单,最主要的符号就是__;下面具体来看:
1、 字段名__gt=值&字段名__lt=值&字段名__gte=值&字段名__lte=值
以上几个方法表示的意思分别为:

  1. __gt:表示大于,相当于SQL中的“>”
  2. __lt:表示小于,相当于SQL中的“<”
  3. __gte:表示大于等于,相当于SQL中的“>=”
  4. __lte:表示小于等于,相当于SQL中的“<=”

实例:查看价格大于200的书籍

data = Book.objects.filter(price__gt=200) #查看价格大于200的书籍
data = Book.objects.filter(price__lte=200) #查看价格小于等于200的书籍

2、 字段名__startswith=值
这个表示以某个值开头的记录
实例:

data = Book.objects.filter(title__startswith='py').values('title')

这个表示查询以“py”开头的所有记录,并且只显示“title”字段(这个有values()函数确定)。
3、 字段名__contains=值&字段名__in=值&字段名__range=值&字段名__icontains=值

  1. 字段名__contains=值:查询指定字段中含有某个值的记录
  2. 字段名__in=值:相当于SQL中的in关键字
  3. 字段名__range=值:查询字段的值在某个范围内的记录
  4. 字段名__icontains=值:和第一个一样,不同的是这个不区分大小写

实例:

 #查询title属性中有“p”的书籍
 data = Book.objects.filter(title__contains='p').values('title')
 #查询价格是100,200或300的书籍
 data = Book.objects.filter(price__in=[100,200,300])
 #查询价格在100到200之间的书籍
 data = Book.objects.filter(price__range=[100,200])
 #查询title属性中包含"p"或"P"的书籍
 data = Book.objects.filter(title__icontains='p')
 #查询2018年12月份的所有书籍,返回值为queryset
 data = Book.objects.filter(pub_date__year=2018,pub_date__month=7) #若查询结果为空,则需要在setttings.py模块中将USE_TZ=True改为USE_TZ=False

最后输出上面实例中每个data即可。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐