• python之路_django ORM模型(单表)(二)


    一、查询表记录

    1、查询相关API

      现将主要的查询API使用实例介绍如下,其中Student为定义的表类:

    (1).Student.objects.all()                                 #返回的QuerySet类型 查询所有记录    [obj1,obj2....] 
    (2).Student.objects.filter()                              #返回的QuerySet类型 查询所有符合条件的记录  
    (3).Student.objects.exclude()                             #返回的QuerySet类型 查询所有不符合条件的记录,过滤条件之外的  
    (4).Student.objects.get()                                 #返回的models对象   查询结果必须有且只有一个,否则报错  
    (5).Student.objects.all().first()                         #返回的models对象   查询结果集合中的第一个,默认是按照主键进行排序的
    (6).Student.objects.filter().last()                       #返回的models对象   查询结果集合中的最后一个,默认是按照主键进行排序的 
    (7).Student.objects.all().values("name","class_id")     #返回的QuerySet类型  ,列表中存放的字典 
    (8).Student.objects.all().values_list("name","class_id")  #返回的QuerySet类型  ,列表中存放的元组 
    (9).Student.objects.all().order_by("class_id")            #按指定字段排序,不指定,按主键排序
    (10).Student.objects.all().count()                        #返回的记录个数
    (11).Student.objects.all().values("name").distinct()      #返回记录进行去重
    (12).Student.objects.all().exist()              #查询结果是否存在,返回True或者False

    filter():

      如下例,查询结果为queryset类型,括号内为过滤条件,多个条件为且的关系。

    stu_list=Student.objects.filter(name="龙华",class_id=6)

    exclude():

      如下例,查询结果为queryset类型,结果为除括号内过滤条件之外的数据。

    stu_list=Student.objects.exclude(name="alex")

    first():

      如下例,查询结果为models类型,是按照主键排序的方式的第一个结果。

    #stu_obj=Student.objects.all().first()
    stu_obj=Student.objects.filter(birth__year="2017").first()
    print(stu_obj.name)

    order_by():

      如下例,查询结果为queryset类型,对查询结果进行排序。

    stu_list=Student.objects.all().order_by("-class_id")                            #降序排列
    stu_list=Student.objects.all().order_by("-class_id")                            #升序排列

    values()与value_list()区别:

    ret=Book.objects.values_list("title")                    #values_list("title")前即可加all()也可以加filter()
    print(ret)                                               #<QuerySet [('王子与青蛙',), ('公主的记忆',), ('爱与恨',)]>
    ret=Book.objects.values("title")                         #values"title")前即可加all()也可以加filter()
    print(ret)                                               #<QuerySet [{'title': '王子与青蛙'}, {'title': '公主的记忆'}, {'title': '爱与恨'}]>

    get():

     过滤条件指向的数据必须有且只有一个记录,否则报错,结果为model类型。
    ret=Student.objects.get(class_id="5")
    print(ret.name) 

    exist():

      当确实有数据存在的时候,如下两种方式均可以执行if语句,但是从执行时翻译成的sql语句,我们就可看出exist存在的意义,他只会查询一条记录,这对数据量很大的表,查询效率是很高的。

    #方式一:
    stu_list=Student.objects.all().exists()              #翻译的sql语句:SELECT (1) AS "a" FROM "app01_student" LIMIT 1; args=()
    if stu_list:
          print("OK")
    #方式二:
    stu_list=Student.objects.all()                       #翻译的sql语句:SELECT "app01_student"."tid", "app01_student"."name", "app01_student"."birth", "app01_student"."age" FROM "app01_student";
    if stu_list:
          print("OK")

    2、双下划线单表查询

      具体介绍如下:

  • 相关阅读:
    POJ 2533 Longest Ordered Subsequence(裸LIS)
    HDU 1159 Common Subsequence(裸LCS)
    HDU 1160(两个值的LIS,需dfs输出路径)
    HDU 1260 Tickets (普通dp)
    HDU 2859 Phalanx(对称矩阵 经典dp样例)
    2018年暑假ACM个人训练题7 题解报告
    HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用)
    HDU 1071 The area(求三个点确定的抛物线的面积,其中一个点是顶点)
    HDU 1077 Catching Fish(用单位圆尽可能围住多的点)
    HDU 1099 Lottery (求数学期望)
  • 原文地址:https://www.cnblogs.com/seven-007/p/8001087.html
Copyright © 2020-2023  润新知