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)
原文地址:https://www.cnblogs.com/messi-mu/p/14258648.html