Django之模型---ORM 單表操作
阿新 • • 發佈:2018-11-09
以上一隨筆中建立的book表為例講解單表操作
新增表記錄
方式一
# create方法的返回值book_obj就是插入book表中的python葵花寶典這本書籍紀錄物件 book_obj=Book.objects.create(title="python葵花寶典",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12")
方式二
#類方法,例項化 book_obj=Book(title="python葵花寶典",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12") book_obj.save()
刪除表記錄
刪除就是delete(),篩出要刪除的記錄呼叫這個方法就可以刪除。
你也可以一次性刪除多個物件。每個 QuerySet 都有一個 delete() 方法,它一次性刪除 QuerySet 中所有的物件。
例如,下面的程式碼將刪除 pub_date 是2005年的 Book 物件:
1 Book.objects.filter(pub_date__year=2005).delete()
在 Django 刪除物件時,會模仿 SQL 約束 ON DELETE CASCADE 的行為,換句話說,刪除一個物件時也會刪除與它相關聯的外來鍵物件。
如果不想級聯刪除,可以設定為:
1 pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True)
要注意的是: delete() 方法是 QuerySet 上的方法,但並不適用於 Manager 本身。這是一種保護機制,是為了避免意外地呼叫 Book.objects.delete() 方法導致 所有的 記錄被誤刪除。如果你確認要刪除所有的物件,那麼你必須顯式地呼叫:
Book.objects.all().delete()
修改表記錄
Book.objects.filter(title__startswith="py").update(price=120)
此外,update()方法對於任何結果集(QuerySet)均有效,這意味著你可以同時更新多條記錄update()方法會返回一個整型數值,表示受影響的記錄條數。
查詢表記錄
查詢API
<1> all(): 查詢所有結果 <2> filter(**kwargs): 它包含了與所給篩選條件相匹配的物件 <3> get(**kwargs): 返回與所給篩選條件相匹配的物件,返回結果有且只有一個, 如果符合篩選條件的物件超過一個或者沒有都會丟擲錯誤。 <4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的物件 <5> order_by(*field): 對查詢結果排序 <6> reverse(): 對查詢結果反向排序 <8> count(): 返回資料庫中匹配查詢(QuerySet)的物件數量。 <9> first(): 返回第一條記錄 <10> last(): 返回最後一條記錄 <11> exists(): 如果QuerySet包含資料,就返回True,否則返回False <12> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,執行後得到的並不是一系列 model的例項化物件,而是一個可迭代的字典序列 <13> values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列 <14> distinct(): 從返回結果中剔除重複紀錄
基於雙下劃線的模糊查詢
Book.objects.filter(price__in=[100,200,300]) #是列表中某一值 Book.objects.filter(price__gt=100) #大於 Book.objects.filter(price__lt=100) # 小於 Book.objects.filter(price__range=[100,200]) #在某一範圍 Book.objects.filter(title__contains="python") #包含 Book.objects.filter(title__icontains="python") Book.objects.filter(title__startswith="py") #以“py”開頭 Book.objects.filter(pub_date__year=2012) #出版年份