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")
二、雙下劃線單表查詢
具體介紹以下: