1. 程式人生 > 其它 >Django ORM 操作

Django ORM 操作

ORM 基本操作-建立資料

  • ORM 基本操作包含了增刪改查,CRUD操作

  • CRUD是指計算機處理時的增加(create)讀取(read)更新(update)和刪除(delete)

  • ORM CURD核心 - > 模型類.管理器物件

    • 每個繼承自models.Model的模型類,都會有一個object物件別同樣繼承下來,這個物件叫管理器物件,資料庫的增刪改查可以通過模型類的管理器實現

    • Class MyModel(models.model):
      	...
      	MyModel.objects.create(...) # objects 就是管理器物件
      
  • Django ORM使用一種只管的方式把資料表中的資料表示成python物件

  • 建立資料中每一條記錄就是建立要給資料物件

  • 方案1

    • MyModel.objects.create(屬性1=值1,屬性2=值2,...)
      • 成功:返回建立好的實體物件
      • 失敗:丟擲異常
  • 方案2

    • 建立MyModel例項物件,並呼叫save()進行儲存

      obj = MyModel(屬性=值...)
      obj.屬性=值
      # 執行save()時才插入資料庫
      obj.save()
      

ORM 基本操作 - 查詢

  • 資料庫的查詢需要使用管理器物件進行

  • 通過MyModel.objects管理器方法呼叫查詢方法

    • all() 查詢全部記錄,返回querySet查詢物件

      • 用法: MyModel.object.all()

      • 等同於selet * from table

      • 返回QuerySet容器物件,內部存放MyModel例項

      • from bookstore.models import Book
        books = Book.objects.all()
        for book in books:
        	print('書名',book.title)
        	
        # 可以在模型類中定義__str__方法,自定義QuerySet中的輸出格式
        def __str__(self):
        	return "書名:%s" %(self.title)
        
    • values('列名1','列明2',,,)

      • MyModel.object.values(...) 查詢部分列的資料並返回QuerySet 字典形式
      • 等同於 select '列名1','列明2', from tableName
    • values_list('列名1','列明2',..)

    • MyModel.object.values_list(...) 查詢部分列的資料並返回QuerySet 元組形式

      • 等同於 select '列名1','列明2', from tableName
    • order_by() 相當於.all().order_by()後排序

      • MyModel.objects.order_by("-列","列")
      • -列 表示降序,預設 為升序
    • get(條件) 查詢符合條件的單一記錄

      • MyModel.objects.get(條件)
      • 返回滿足條件的唯 一 一 條資料,若多或無都回丟擲異常
      • 該方法只能返回一條資料
    • filter(條件) 查詢符合條件的多條記錄

      • MyModel.objects.filter(屬性1=值1,屬性2=值2)
      • 返回包含此條件的全部資料集,多個條件之間的關係為 與 ·and·
      • 返回一個QuerySet容器物件
    • exclude(條件) 查詢符合條件之外的全部記錄

      • MyModel.objects.exclude(條件)
      • 返回不包含此條件的全部資料集
  • 條件查詢

    • 查詢謂詞

      __exact: 等值匹配

      Book.objects.filter(id__exact=1)等同於select * from book where id=1

      __contains: 包含指定值

      Book.objects.filter(id__contains=1)等同於select * from book where id like '%1%'

      __startswith:以XXX開始

      Book.objects.filter(id__startwith=1)等同於select * from book where id like '1%'

      __endswith:以XXX結束

      Book.objects.filter(id__endswith=1)等同於select * from book where id like '%1'

      __gt:大於指定值

      Book.objects.filter(id__gt=1)等同於select * from book where id>1

      __gte:大於等於

      Book.objects.filter(id__gte=1)等同於select * from book where id >=1

      __lt: 小於

      Book.objects.filter(id__lt=1)等同於select * from book where id <1

      __lte: 小於等於

      Book.objects.filter(id__lte=1)等同於select * from book where id <=1

      __in:查詢資料是否在指定範圍內

      Book.objects.filter(id__in=[1,2])等同於select * from book where id in (1,2)

      __range: 查詢資料是否在指定的範圍內

      Book.objects.filter(id__range=(2,5))等同於select * from book where id between 2 and 5

      ORM 更新操作

      • 更新一個數據的步驟
        • 1 查
          • 通過get()得到要修改的實體物件
        • 2 改
          • 通過物件.屬性的方式修改資料
        • 3儲存
          • 通過物件.save()儲存資料

      ORM 刪除操作

      • 刪除步驟
        • 1 查
          • 查詢到結果對應的資料隊形
        • 2 刪
          • 使用物件.delete()方法實現刪除
      • 偽刪除
        • 新增欄位表示是否可用,預設設定為True,當需要刪除時設定為False
        • 確保顯示資料的地方,均過濾了新增的欄位為True