django.db.models.query.QuerySet
1.可迭代
2.可切片
官方文檔:https://docs.djangoproject.com/en/1.9/ref/models/querysets/
相關API
1.get(**kwargs)
解釋:返回與篩選條件相匹配的Model對象,返回結果有且只有一個。
說明:如果符合條件的對象多於一個拋出MultipleObjectsReturned異常,如果沒有找到拋出DoesNotExist異常
語法:ModelName.objects.get(itemName=itemNameValue)
例子:Author.objects.get(id=1)
2.all()
解釋:查詢所有結果(懶加載),當查詢的時候並不真實發送sql語句,用的時候才會真的去查詢
語法:ModelName.objects.all()
例子:Author.objects.all(id=1)
3.filter(**kwargs)
解釋:包含了與所給的篩選條件相匹配的QuerySet
語法:ModelName.objects.filter(itemName=itemNameValue)
例子:Author.objects.filter(id=1)
4.exclude(**kwargs):
解釋:包含了與所給的篩選件不匹配的QuerySet,於filter正好相反
語法:ModelName.objects.exclude(itemName=itemNameValue)
例子:Author.objects.filter(id=1)
5.order_by(*fields)
解釋:對查詢結果進行排序
語法:ModelName.objects.all().order_by("itemName")
例子:Author.objects.all().order_by("id")
6.reverse()
解釋:對查詢結果反向排序
語法:ModelName.objects.all().order_by("itemName").reverse()
例子:Author.objects.all().order_by("id")
7.distinct()
解釋:對查詢結果去重
語法:ModelName.objects.all().distinct()
例子:Author.objects.all().distinct()
8.values(*fields)
解釋:返回一個ValuesQuerySet(一個特殊的QuerySet)
說明:運行后得到的不是一系列model的實例對象,而是一個可迭代的字段序列
語法:ModelName.objects.filter(name=value).values("name","name")
例子:Author.objects.filter(id=1).values("name","id")
9.values_list(*fields)
解釋:與values相似只是返回的是一個元組
語法:ModelName.objects.filter(name=value).values_list("name","name")
例子:Author.objects.filter(id=1).values_list("name","id")
10.count()
解釋:返回數據庫中匹配查詢的對象數量
語法:ModelName.objects.filter(itemName=itemNameValue).count()
例子:Author.objects.filter(name="xiaol").count()
11.first()/last()
解釋:第一條記錄/最后一條記錄
語法:ModelName.objects.filter(itemName=itemNameValue).first()
例子:Author.objects.filter(name="xiaol").last()
關聯查詢:
方法:使用兩個下划線(__)可以進行關聯查詢
例子:查詢AutherDetail的信息
語法:AuthorDetail.objects.filter(id="2").values("sex","email", "author__name")
聚合查詢:需要引入from django.db.models import *
方法:使用aggreagte關鍵字
用法:xxx.filter(查詢條件).aggregate(別名=聚合函數('聚合字段'))
語法:Author.objects.filter(name="xiaol").aggregate(myCount=Count('id'))
分組查詢:需要引入from django.db.models import *
方法:使用aggreagte關鍵字
用法:xxx.filter(分組字段).annotate(分組后操作)
語法:Author.objects.filter(name="xiaol").annotate(myCount=Count('id'))
