< 1 > all (): 查询所有结果,结果是queryset类型
< 2 > filter ( * * kwargs): 它包含了与所给筛选条件相匹配的对象,结果也是queryset类型 Book.objects. filter (title = 'linux' ,price = 100 ) #里面的多个条件用逗号分开,并且这几个条件必须都成立,是and的关系,or关系的我们后面再学,直接在这里写是搞不定or的
models.Student.objects. filter ( id = 7 ,name = '大壮哥哥' ,age = 78 ).update(
name = '大壮禅师' ,
age = 78
)
#打伞形式传参
models.Student.objects. filter ( * * { 'id' : 7 , 'name' : '大壮禅师' }).update(age = 100 )
models.Student.objects. all (). filter ( id = 7 ) queryset类型可以调用fitler在过滤
< 3 > get( * * kwargs): 返回与所给筛选条件相匹配的对象,不是queryset类型,是行记录对象,返回结果有且只有一个,
如果符合筛选条件的对象超过一个或者没有都会抛出错误。捕获异常 try 。 Book.objects.get( id = 1 )
< 4 > exclude( * * kwargs): 排除的意思,它包含了与所给筛选条件不匹配的对象,没有不等于的操作昂,用这个exclude,返回值是queryset类型 Book.objects.exclude( id = 6 ),返回 id 不等于 6 的所有的对象,或者在queryset基础上调用,Book.objects. all ().exclude( id = 6 )
# exclude(**kwargs): 排除,objects控制器和queryset集合都可以调用,返回结果是queryset类型
# query = models.Student.objects.exclude(id=1)
# print(query)
# query = models.Student.objects.filter(age=38).exclude(id=6)
# print(query)
< 5 > order_by( * field): queryset类型的数据来调用,对查询结果排序,默认是按照 id 来升序排列的,返回值还是queryset类型
models.Book.objects. all ().order_by( 'price' , 'id' ) #直接写price,默认是按照price升序排列,按照字段降序排列,就写个负号就行了order_by('-price'),order_by('price','id')是多条件排序,按照price进行升序,price相同的数据,按照id进行升序
< 6 > reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型
# 排序之后反转
# query = models.Student.objects.all().order_by('id').reverse()
# print(query)
< 7 > count(): queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。
< 8 > first(): queryset类型的数据来调用,返回第一条记录 Book.objects. all ()[ 0 ] = Book.objects. all ().first(),得到的都是model对象,不是queryset
< 9 > last(): queryset类型的数据来调用,返回最后一条记录,结果为model对象类型
< 10 > exists(): queryset类型的数据来调用,如果QuerySet包含数据,就返回 True ,否则返回 False
空的queryset类型数据也有布尔值 True 和 False ,但是一般不用它来判断数据库里面是不是有数据,如果有大量的数据,你用它来判断,那么就需要查询出所有的数据,效率太差了,用count或者exits
例:all_books = models.Book.objects. all ().exists() #翻译成的sql是SELECT (1) AS `a` FROM `app01_book` LIMIT 1,就是通过limit 1,取一条来看看是不是有数据
< 11 > values( * field): 用的比较多,queryset类型的数据来调用,返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
model的实例化对象,而是一个可迭代的字典序列,只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法,其他方法也是一样的。
< 12 > values_list( * field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
< 13 > distinct(): values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录,结果还是queryset
query = models.Student.objects. all ().values( 'age' ).distinct()
print (query)
|