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,...)
- 成功:返回建立好的實體物件
- 失敗:丟擲異常
- 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()儲存資料
- 1 查
ORM 刪除操作
- 刪除步驟
- 1 查
- 查詢到結果對應的資料隊形
- 2 刪
- 使用物件.delete()方法實現刪除
- 1 查
- 偽刪除
- 新增欄位表示是否可用,預設設定為True,當需要刪除時設定為False
- 確保顯示資料的地方,均過濾了新增的欄位為True
- 更新一個數據的步驟
-