orm 13个常用方法

orm 13个常用方法

<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)
    

 

posted @ 2020-12-31 13:30  笑而不语心自闲  阅读(188)  评论(0编辑  收藏  举报