天天看點

五、ORM語句——二1、單表操作的其他事項(接上)2、模糊查詢

1、單表操作的其他事項(接上)

1、 在建立表的那個類中,其擁有的objects裡提供了各種管理資料表的方法,上一節也提到過objects中添加資料和查詢資料等操作。

注: 類中的

__str__()

方法,在類中重寫此方法以後,如果再調用print()函數列印對象時,直接列印的是此函數的傳回值。

2、 單表查詢常用的API

  1. all():調用者objects管理器,傳回queryset
  2. filter():調用者objects管理器,傳回queryset
  3. get():調用者objects管理器,傳回查詢到model對象,(查詢結果有且隻有一個)
  4. first():調用者queryset,傳回model對象
  5. exclude():調用者objects管理器,傳回queryset
  6. order_by():排序 由queryset調用,傳回值是queryset
  7. count():計數 由queryset調用,傳回值是int
  8. reverse():由queryset調用,傳回值是queryset
  9. exists():由queryset調用,傳回值是bool值
  10. values():由queryset對象調用,傳回值是queryset
  11. values_list():由queryset調用,傳回值是queryset
  12. 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=值

以上幾個方法表示的意思分别為:

  1. __gt

    :表示大于,相當于SQL中的“>”
  2. __lt

    :表示小于,相當于SQL中的“<”
  3. __gte

    :表示大于等于,相當于SQL中的“>=”
  4. __lte

    :表示小于等于,相當于SQL中的“<=”

執行個體:檢視價格大于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=值

  1. 字段名__contains=值

    :查詢指定字段中含有某個值的記錄
  2. 字段名__in=值

    :相當于SQL中的

    in

    關鍵字
  3. 字段名__range=值

    :查詢字段的值在某個範圍内的記錄
  4. 字段名__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即可。