python之路_django ORM模型(單表)(二)

1、查詢表記錄sql

一、查詢相關APIapp

  現將主要的查詢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():code

  以下例,查詢結果爲queryset類型,括號內爲過濾條件,多個條件爲且的關係。對象

stu_list=Student.objects.filter(name="龍華",class_id=6)

exclude():blog

  以下例,查詢結果爲queryset類型,結果爲除括號內過濾條件以外的數據。排序

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

first():get

  以下例,查詢結果爲models類型,是按照主鍵排序的方式的第一個結果。it

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

order_by():ast

  以下例,查詢結果爲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")

二、雙下劃線單表查詢

  具體介紹以下:

相關文章
相關標籤/搜索