1. 程式人生 > 其它 >django ORM 高階用法

django ORM 高階用法

F 物件與Q物件

  • F 物件

    • 一個F物件代表資料庫中某條記錄的欄位的資訊

      • 通常是對資料庫中欄位值在圖獲取的情況下進行操作
      • 用於類屬性(欄位)之間的比較
    • 語法

      from django.db.models import F
      F('列明')
      
    • 例項:更新Book例項中所有的零售價漲10塊

      使用F物件,不用獲取物件的值使 現有的值+=10
      Book.objects.all().update(market_price=F('market_price')+10)
      # update bookstore_book set market_price = (bookstore_book.market_price +10)
      
      # 未使用F物件,先獲取每個物件的值,再加10後再存入資料庫 
      books = Book.objects.all()
      for book in books:
      	book.market_price=book.marget_price+10
      	book.save()
      
      
  • Q物件

    • 當獲取查詢結果集使用複雜的邏輯或 |、邏輯非 ~等操作是可以藉助與Q物件來進行操作

    • Q物件在資料包django.db.models中,需要先匯入在使用

      # 找出價格低於20 或清華大學出版社的全部圖書
      Book.objects.filter(Q(price__lt=20)|Q(pub='清華大學出版社'))
      
    • 在條件中來實現除 and&以外的or|或not~操作

    • 運算子

      • & 與操作
      • | 或操作
      • ~ 非操作
    • 語法:

    • Q(條件1) | Q(條件2)  # 條件1成立 或 條件2成立
      Q(條件1) & Q(條件2)  # 條件1成立 並且 條件2成立
      Q(條件1) | Q(條件2)  # 條件1成立 並且 條件2不成立
      

    聚合查詢和原生資料庫操作

    • 聚合查詢是指標對一個數據表中的欄位和資料進行部分或全部進行統計查詢,

      • 聚合查詢分為 整表聚合【aggregate】 分組聚合【annotate】
    • 不帶分組的聚合查詢是指將全部資料進行幾張統計查詢

      • 匯入包: from django.db.models import *
      • 聚合函式: Sum, Avg,Count,Max,Min
      • 語法: MyModel.objects.aggregate(結果變數名=聚合函式('列'))
      • 返回結果: 結果變數名和值組成的字典 {"結果變數名":值}
    • 分組聚合是指通過計算查詢結果中每一個物件所關聯的物件集合,從而計算出的值,即為查詢集的每一項生成聚合

      • 語法QuerySet.annotate(結果變數名=聚合函式('列'))
      • 返回值:QuerySet
    • Django 也可以支援直接用sql語句的方式通訊資料庫

      • 查詢MyModel.objects.raw()進行資料庫查詢操作
      • 語法: MyModel.objets.raw(sql語句,拼接引數)
      • 返回值:RawQuerySet集合【只支援基礎操作,比如迴圈】
    • 原生資料庫操作-cursor

    • 完全跨過模型類操作資料庫 查詢更新刪除

      • 匯入cursor所在的包from django.db import connection

      • 用建立cursor類的建構函式建立cursor物件,在世用cursor物件

        from django.db import connection
        with connection.cursor() as curs:
        	curs.execute('sql語句','拼接引數')