天天看点

五、ORM语句——二1、单表操作的其他事项(接上)2、模糊查询

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=值

这个表示以某个值开头的记录

实例:

这个表示查询以“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即可。