国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django中更新多個對象數據與刪除對象的方法

2020-01-04 18:03:01
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了Django中更新多個對象數據與刪除對象的方法,Django是Python重多各色框架中人氣最高的一個,需要的朋友可以參考下

更新多個對象

例如說我們現在想要將Apress Publisher的名稱由原來的”Apress”更改為”Apress Publishing”。若使用save()方法,如:

 

 
  1. >>> p = Publisher.objects.get(name='Apress'
  2. >>> p.name = 'Apress Publishing' 
  3. >>> p.save() 

這等同于如下SQL語句:

 

 
  1. SELECT id, name, address, city, state_province, country, website 
  2. FROM books_publisher 
  3. WHERE name = 'Apress'
  4.  
  5. UPDATE books_publisher SET 
  6. name = 'Apress Publishing'
  7. address = '2855 Telegraph Ave.'
  8. city = 'Berkeley'
  9. state_province = 'CA'
  10. country = 'U.S.A.'
  11. website = 'http://www.apress.com' 
  12. WHERE id = 52; 

(注意在這里我們假設Apress的ID為52)

在這個例子里我們可以看到Django的save()方法更新了不僅僅是name列的值,還有更新了所有的列。 若name以外的列有可能會被其他的進程所改動的情況下,只更改name列顯然是更加明智的。 更改某一指定的列,我們可以調用結果集(QuerySet)對象的update()方法: 示例如下:

 

 
  1. >>> Publisher.objects.filter(id=52).update(name='Apress Publishing'

與之等同的SQL語句變得更高效,并且不會引起競態條件。

 

 
  1. UPDATE books_publisher 
  2. SET name = 'Apress Publishing' 
  3. WHERE id = 52; 

update()方法對于任何結果集(QuerySet)均有效,這意味著你可以同時更新多條記錄。 以下示例演示如何將所有Publisher的country字段值由'U.S.A'更改為'USA':

 

 
  1. >>> Publisher.objects.all().update(country='USA'

update()方法會返回一個整型數值,表示受影響的記錄條數。 在上面的例子中,這個值是2。

刪除對象

刪除數據庫中的對象只需調用該對象的delete()方法即可:

 

 
  1. >>> p = Publisher.objects.get(name="O'Reilly"
  2. >>> p.delete() 
  3. >>> Publisher.objects.all() 
  4. [<Publisher: Apress Publishing>] 

同樣我們可以在結果集上調用delete()方法同時刪除多條記錄。這一點與我們上一小節提到的update()方法相似:

 

 
  1. >>> Publisher.objects.filter(country='USA').delete() 
  2. >>> Publisher.objects.all().delete() 
  3. >>> Publisher.objects.all() 
  4. [] 

刪除數據時要謹慎! 為了預防誤刪除掉某一個表內的所有數據,Django要求在刪除表內所有數據時顯示使用all()。 比如,下面的操作將會出錯:

 

 
  1. >>> Publisher.objects.delete() 
  2. Traceback (most recent call last): 
  3. File "<console>", line 1, in <module> 
  4. AttributeError: 'Manager' object has no attribute 'delete' 

而一旦使用all()方法,所有數據將會被刪除:

 

 
  1. >>> Publisher.objects.all().delete() 

如果只需要刪除部分的數據,就不需要調用all()方法。再看一下之前的例子:

 

 
  1. >>> Publisher.objects.filter(country='USA').delete() 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江川县| 阿瓦提县| 上栗县| 广河县| 桂阳县| 金乡县| 土默特左旗| 海丰县| 长顺县| 大方县| 泰和县| 章丘市| 普陀区| 禄劝| 惠来县| 六安市| 长治县| 灵台县| 黄平县| 永善县| 巴林左旗| 饶阳县| 娄底市| 西华县| 通山县| 运城市| 汽车| 德清县| 云林县| 五台县| 手游| 武安市| 共和县| 泸州市| 通许县| 廊坊市| 溆浦县| 信阳市| 阿坝县| 郁南县| 福清市|