1. 程式人生 > >Django之模型---ORM 單表操作

Django之模型---ORM 單表操作

以上一隨筆中建立的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)  #出版年份