1、單表操作的其他事項(接上)
1、 在建立表的那個類中,其擁有的objects裡提供了各種管理資料表的方法,上一節也提到過objects中添加資料和查詢資料等操作。
注: 類中的
__str__()
方法,在類中重寫此方法以後,如果再調用print()函數列印對象時,直接列印的是此函數的傳回值。
2、 單表查詢常用的API
- all():調用者objects管理器,傳回queryset
- filter():調用者objects管理器,傳回queryset
- get():調用者objects管理器,傳回查詢到model對象,(查詢結果有且隻有一個)
- first():調用者queryset,傳回model對象
- exclude():調用者objects管理器,傳回queryset
- order_by():排序 由queryset調用,傳回值是queryset
- count():計數 由queryset調用,傳回值是int
- reverse():由queryset調用,傳回值是queryset
- exists():由queryset調用,傳回值是bool值
- values():由queryset對象調用,傳回值是queryset
- values_list():由queryset調用,傳回值是queryset
- distinct():去重,由queryset調用,傳回值是queryset
2、模糊查詢
模糊查詢異常情況的處理
如果在表中查詢滿足某個時間點的東西時,查詢結果為空,則需要在setttings.py子產品中将USE_TZ=True改為USE_TZ=False;
執行個體:
data = Book.objects.filter(pub_date__year=2018,pub_date__month=7) #若查詢結果為空,則需要在setttings.py子產品中将USE_TZ=True改為USE_TZ=False
print(data)
模糊查詢
模糊查詢的方式比較簡單,最主要的符号就是
__
;下面具體來看:
1、
字段名__gt=值
&
字段名__lt=值
&
字段名__gte=值
&
字段名__lte=值
以上幾個方法表示的意思分别為:
-
:表示大于,相當于SQL中的“>”__gt
-
:表示小于,相當于SQL中的“<”__lt
-
:表示大于等于,相當于SQL中的“>=”__gte
-
:表示小于等于,相當于SQL中的“<=”__lte
執行個體:檢視價格大于200的書籍
data = Book.objects.filter(price__gt=200) #檢視價格大于200的書籍
data = Book.objects.filter(price__lte=200) #檢視價格小于等于200的書籍
2、
字段名__startswith=值
這個表示以某個值開頭的記錄
執行個體:
這個表示查詢以“py”開頭的所有記錄,并且隻顯示“title”字段(這個有values()函數确定)。
3、
字段名__contains=值
&
字段名__in=值
&
字段名__range=值
&
字段名__icontains=值
-
:查詢指定字段中含有某個值的記錄字段名__contains=值
-
:相當于SQL中的字段名__in=值
關鍵字in
-
:查詢字段的值在某個範圍内的記錄字段名__range=值
-
:和第一個一樣,不同的是這個不區分大小寫字段名__icontains=值
執行個體:
#查詢title屬性中有“p”的書籍
data = Book.objects.filter(title__contains='p').values('title')
#查詢價格是100,200或300的書籍
data = Book.objects.filter(price__in=[100,200,300])
#查詢價格在100到200之間的書籍
data = Book.objects.filter(price__range=[100,200])
#查詢title屬性中包含"p"或"P"的書籍
data = Book.objects.filter(title__icontains='p')
#查詢2018年12月份的所有書籍,傳回值為queryset
data = Book.objects.filter(pub_date__year=2018,pub_date__month=7) #若查詢結果為空,則需要在setttings.py子產品中将USE_TZ=True改為USE_TZ=False
最後輸出上面執行個體中每個data即可。