天天看點

Python——Django中model進行查詢

  • 今天學習的是有關于在model中進行資料查詢的相關知識。
  • 在views.py中進行查詢的操作:
    • 對單個對象進行擷取:
      • 查詢條件沒有比對的對象,會抛出異常,DoesNotExist
      • 查詢出多個比對的對象,也會抛出異常,MultipleObjectsReturned
    • first和last的函數使用。直接在objects之後選擇這類的函數,可以從整個傳回的資料集中挑選出第一個和最後一個。
    • 切片。和python中的切片不太一樣
      • 主要通過objects.all()[a:b]實作。擷取的是第a條到b-1條的資料。屬于左閉右開。
      def query_persons(request):
      persons = Person.objects.all()[1:3]
      
      context = {
          "persons": persons
      }
      
      return render(request, 'db_list.html', context=context)
                 
  • 然後是學習對日期的條件過濾。
def date(request):
    orders=Order.objects.filter(o_time__month=09)
           
  • 在django中,查詢條件有時區問題。可以通過以下的方式解決:
    • 關閉django中自定義的時區
    • 在資料庫中建立對應的時區表
  • 使用aggregate()函數傳回聚合函數的值
    • Avg:平均值
    • Count:數量
    • Max:最大
    • Min:最小
    • Sum:求和
    • 使用形式示例:XXX.objects().aggregate(Max(‘age’))
  • F對象:
    • 可以擷取不同的屬性值并且進行比較。
    • 可以支援算術運算
    • 使用函數示例:user=user.objects.filter(num__gte=F(‘other_num’))
  • Q對象:
    • 可以對條件進行封裝
    • 封裝之後,可以支援邏輯運算
      • 與 & and
      • 或 | or
      • 非 - not
      • 使用函數示例:companies=company.object.filter(Q(num__gt=5)|Q(num__gt=10))