Django——models 查詢

models查詢功能就是對數據庫進行檢索,Django的 ORM 自帶有很多檢索方法來簡化 select 語句。

檢索所有對象

ret = User.objects.all()

all ( ) 方法會以queryset(類似於列表)的形式返回該數據庫中所有的數據。

檢索單個對象

ret = User.objects.get(pk=1)

get ( ) 方法返回的是符合條件的單個數據,適合檢索唯一性數據

如果沒有匹配的對象會觸發 DoesNotExist 異常

如果匹配到多條數據會觸發MultipleObjectsReturned異常

檢索特定對象

使用過濾器來檢索特定對象主要有 filter 與 exclude 兩種方法,與 all 相同返回的都是一個數據集合。沒有數據匹配到返回一個空集合。

#查找符合條件的選項

ret = User.objects.filter(password="123456")

#查找不符合條件的選項

ret = User.objects.exclude(password="123456")

過濾器是可以疊加操作的,比如

ret=User.objects.exculde(password="123456").filter(password="654321")

每一步的過濾都會產生一個獨立的全新的queryset對象。

在過濾的過程中,相關語句並不會涉及任何 數據庫相關操作,只有在使用queryset結果時才會執行操作。

filter 可以針對字段來進行條件查詢

  • 對象__字段=value:外鍵某個字段為value的
  • 字段__exact=value:該字段為value(區分大小寫)的
  • 字段__iexact=value:該字段為value(忽略大小寫)的
  • 字段__contains=value:該字段包含value的
  • 字段__icontains=value:該字段包含value(忽略大小寫)的
  • 字段__lt=value:該字段小於value的
  • 字段__lte=value:該字段小於等於value的
  • 字段__gt=value:該字段大於value的
  • 字段__gte=value:該字段大於等於value的
  • 字段__in=list:該字段存在於list的
  • 字段__startswith=value:該字段以value開頭的
  • 字段__istartswith=value:該字段以value(忽略大小寫)開頭的
  • 字段__range=value:該字段在value範圍的
  • 字段__year=value:該字段等於value年的
  • 字段__month=value:該字段等於value月的
  • 字段__day=value:該字段等於value日的
  • 字段__isnull=True/False:該字段為空或非空的

對查詢結果進行切片

queryset結果是類列表結構,針對列表的一些方法也是可以使用的,比如:

ret[:5] # 查詢結果前五條數據ret[-5:] # 查詢結果後五條數據ret[::2] # 查詢結果第單數個數據ret[1:-1:2] # 查詢結果第雙數個數據...12345

對查詢結果去重

distinct()方法可以對查詢結果進行字段去重

Django中ORM查詢的性能問題

執行查詢操作後,queryset將會被緩存起來,再次使用時是從緩存中取數據,這樣避免了大量重複的請求影響數據庫的性能。當需要判斷queryset是否為空,可以由以下方式判斷,性能依次增加:123if ret:passif ret.count>0:passif ret.exists():pass123當獲取的數據非常大時,可以用迭代的方式取值:12ret.iterator()
Django——models 查詢


分享到:


相關文章: