单表查询
Django测试环境的搭建
想要使用app文件夹里面的test文件,就一定要在他里面先配置好,才行。
import os
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "one_search.settings") #这里的one_search要改成你自己的Django项目名字。
import django
django.setup()
# 你就可以在下面测试django任何的py文件
单表查询
增删改我们都已经知道了,所以只写上查询。
查询的必知必会的13条
-
all ( ) 查询所有
res = models.Book.objects.all() # 惰性查询 数据类型:QuerySet
-
filter ( ) 根据条件查询
res = models.Book.objects.filter(pk=2) #数据类型:QuerySet
-
get ( ) 不推荐使用,因为只要找不到数据就直接报错了。查询到的数据是数据对象本身
-
first ( ) 拿第一个
res = models.Book.objects.first() #数据类型:数据对象本身
-
last ( ) 拿最后一个
res = models.Book.objects.last() #数据类型:数据对象本身
-
exclude ( ) 除此之外
res = models.Book.objects.exclude(pk=3).filter(pk=4).filter(pk=1) # 结果是除此之外的所有数据,后面还可以跟查询。数据类型:QuerySet
-
values( ) 列表套字典
res = models.Book.objects.values('title') #数据类型:QuerySet
-
values_list ( ) 列表套元组
res = models.Book.objects.values_list('title') #数据类型:QuerySet
-
count ( ) 统计数据的个数
res = models.Book.objects.values_list('title')
-
distinct ( ) 去重:数据必须是一模一样的情况下,包括主键。
res = models.Book.objects.all().distinct() # 所以在本案例中,这条语句搜索出来的结果还是原结果。 res1 = models.Book.objects.values('title','price').distinct() #这条语句是只查询出了两个字段,所以只要这两个字段完全一样就可以去重。
-
order_by ( ) 排序:默认是升序,价格负号就是降序
res = models.Book.objects.order_by('price') res1 = models.Book.objects.order_by('-price') #可以在后面再加 order_by,当相同的时候,按照什么来排序。
-
reverse ( ) 前面必须是排序结果才能反转,否则不作处理,但是不会报错。
res = models.Book.objects.order_by('price').reverse()
-
exists ( ) 没有卵用的东西
res = models.Book.objects.filter(pk=1).exists() #判断是否存在,返回true或者false。。。。。
神奇的双下划线查询
查询价格大于200的书籍
res = models.Book.objects.filter(price__gt=200)
查询价格小于200的书籍
res = models.Book.objects.filter(price__lt=200)
print(res)
查询价格大于或者等于200的书籍
res = models.Book.objects.filter(price__gte=200)
查询价格小于或者等于200的书籍
res1 = models.Book.objects.filter(price__lte=200)
print(res,res1)
价格是200 或者是123.23 或者666.66
res = models.Book.objects.filter(price__in=[200,123.23,666.66])
print(res)
价格在200 到700之间的书籍
res = models.Book.objects.filter(price__range=(200,666.66)) # 顾头不顾尾
print(res)
查询书籍名称中包含p的
res = models.Book.objects.filter(title__contains='p') # 区分大小写
print(res)
忽略大小写
res = models.Book.objects.filter(title__icontains='p') # 忽略大小写
print(res)
查询书籍名称是以三开头的书籍
res = models.Book.objects.filter(title__startswith='三')
查询书籍名称是以p结束的书籍
res1 = models.Book.objects.filter(title__endswith='P')
print(res1)
查询出版日期是2019年的书籍
res = models.Book.objects.filter(publish_date__year='2019')
查询出版日期是10月的书籍
res = models.Book.objects.filter(publish_date__month='10')