zoukankan      html  css  js  c++  java
  • ORM-查询表记录(单表)

    一、简单查询
    <1> all(): 查询所有结果,结果是queryset类型

        all_obj = models.BookInfo.objects.all()
        print(all_obj)
    

    <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象,结果也是queryset类型

        filter_obj = models.BookInfo.objects.filter(id=4, book_title='888')
        print(filter_obj) 
    

    <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,是.model的自定义类对象,返回结果有且只有一个。如果符合筛选条件的对象超过一个或者没有都会抛出错误,捕获异常try。

        get_obj = models.BookInfo.objects.get(id=4)
        print(get_obj)
        print(get_obj.book_title)
    

    <4> exclude(**kwargs): 排除的意思,返回值是queryset的类型
                    
    <5> order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型。

        order_ibj = models.BookInfo.objects.all().order_by()
        for ele in order_ibj:
            print(ele.id)
    
     #直接写price,默认是按照book_price升序排列,按照字段降序排列,就写个负号就行了order_by('-book_price'),order_by('book_price','id')是多条件排序,按price进行升序,price相同的数据,按照id进行升序
        order_ibj1 = models.BookInfo.objects.all().order_by('book_price')
        for ele in order_ibj1:
            print(ele.book_price)
    

    <6> reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型。

    <7> count(): queryset类型的数据来调用,返回数据库中匹配查询(QuerySet)的对象数量。

        all_obj = models.BookInfo.objects.all()
        print(all_obj)
        print(all_obj.count())
    

    <8> first(): queryset类型的数据来调用,返回第一条记录 Book.objects.all()[0] = Book.objects.all().first(),得到的都是model对象。

        all_obj = models.BookInfo.objects.all()
        print(all_obj.first().id)
    

    <9> last(): queryset类型的数据来调用,返回最后一条记录,得到的都是model对象。

        all_obj = models.BookInfo.objects.all()
        print(all_obj.last().id)
    

    <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类型的数据来调用,返回一个特殊的QuerySet(ValueQuerySet),即是一个可迭代的字典序列

        sele_obj = models.BookInfo.objects.all().values('book_title')
        print(sele_obj)
    

    <12> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

        sele_obj1 = models.BookInfo.objects.all().values_list('book_title')
        print(sele_obj1)
    

    <13> distinct(): values和values_list得到的queryset类型的数据来调用,从返回结果中剔除重复纪录

        sele_obj3 = models.BookInfo.objects.all().values('book_title').distinct()
        print(sele_obj3)
    

    以上只要是返回的queryset类型,就可以继续链式调用queryset类型的其他的查找方法

    二、基于双下划线的模糊查询

    #price值等于这三个里面的任意一个的对象
    models.BookInfo.objects.filter(book_price__in=[100,200,300]) 
    
    #大于,大于等于是book_price__gte=100,别写book_price>100,这种参数不支持
    models.BookInfo.objects.filter(book_price__gt=100)  
    models.BookInfo.objects.filter(book_price__lt=100)
    
     #sql的between and,大于等于100,小于等于200
    models.BookInfo.objects.filter(book_price__range=[100,200]) 
    
     #title值中包含python的,区分大小写
    models.BookInfo.objects.filter(book_title__contains="python") 
    
    #title值中包含python的,不区分大小写
    models.BookInfo.objects.filter(book_title__icontains="python")
    
    #以py开头,不区分大小写 
    models.BookInfo.objects.filter(book_title__startswith="py") 
    
    #pub_date的年份为2003的
    sele_obj4 = models.BookInfo.objects.filter(pub_date__year=2003)
    print(sele_obj4[0].pub_date)
    
  • 相关阅读:
    Lesson_strange_words6
    Lesson_strange_words3
    Lesson_strange_words4
    Lesson_strange_words1
    Lesson_strange_words2
    关于我们子页面
    关于我们页面
    走进龙门石窟子页面
    3.用户登陆注册
    2.项目初始化
  • 原文地址:https://www.cnblogs.com/messi-mu/p/14258648.html
Copyright © 2011-2022 走看看