Django中更新多個對象數(shù)據(jù)與刪除對象的方法
更新多個對象
例如說我們現(xiàn)在想要將Apress Publisher的名稱由原來的”Apress”更改為”Apress Publishing”。若使用save()方法,如:
>>> p = Publisher.objects.get(name='Apress') >>> p.name = 'Apress Publishing' >>> p.save()
這等同于如下SQL語句:
SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name = 'Apress'; UPDATE books_publisher SET name = 'Apress Publishing', address = '2855 Telegraph Ave.', city = 'Berkeley', state_province = 'CA', country = 'U.S.A.', website = 'http://www.apress.com' WHERE id = 52;
(注意在這里我們假設(shè)Apress的ID為52)
在這個例子里我們可以看到Django的save()方法更新了不僅僅是name列的值,還有更新了所有的列。 若name以外的列有可能會被其他的進(jìn)程所改動的情況下,只更改name列顯然是更加明智的。 更改某一指定的列,我們可以調(diào)用結(jié)果集(QuerySet)對象的update()方法: 示例如下:
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
與之等同的SQL語句變得更高效,并且不會引起競態(tài)條件。
UPDATE books_publisher SET name = 'Apress Publishing' WHERE id = 52;
update()方法對于任何結(jié)果集(QuerySet)均有效,這意味著你可以同時更新多條記錄。 以下示例演示如何將所有Publisher的country字段值由'U.S.A'更改為'USA':
>>> Publisher.objects.all().update(country='USA') 2
update()方法會返回一個整型數(shù)值,表示受影響的記錄條數(shù)。 在上面的例子中,這個值是2。
刪除對象
刪除數(shù)據(jù)庫中的對象只需調(diào)用該對象的delete()方法即可:
>>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() >>> Publisher.objects.all() [<Publisher: Apress Publishing>]
同樣我們可以在結(jié)果集上調(diào)用delete()方法同時刪除多條記錄。這一點與我們上一小節(jié)提到的update()方法相似:
>>> Publisher.objects.filter(country='USA').delete() >>> Publisher.objects.all().delete() >>> Publisher.objects.all() []
刪除數(shù)據(jù)時要謹(jǐn)慎! 為了預(yù)防誤刪除掉某一個表內(nèi)的所有數(shù)據(jù),Django要求在刪除表內(nèi)所有數(shù)據(jù)時顯示使用all()。 比如,下面的操作將會出錯:
>>> Publisher.objects.delete() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Manager' object has no attribute 'delete'
而一旦使用all()方法,所有數(shù)據(jù)將會被刪除:
>>> Publisher.objects.all().delete()
如果只需要刪除部分的數(shù)據(jù),就不需要調(diào)用all()方法。再看一下之前的例子:
>>> Publisher.objects.filter(country='USA').delete()
- 對Django 中request.get和request.post的區(qū)別詳解
- 基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實例
- 教你如何將 Sublime 3 打造成 Python/Django IDE開發(fā)利器
- Python+Django在windows下的開發(fā)環(huán)境配置圖解
- python Django連接MySQL數(shù)據(jù)庫做增刪改查
- Django如何自定義model創(chuàng)建數(shù)據(jù)庫索引的順序
- Django中對數(shù)據(jù)查詢結(jié)果進(jìn)行排序的方法
- Django中幾種重定向方法
- Python的Django框架中forms表單類的使用方法詳解
- python Django模板的使用方法(圖文)
- Django objects.all()、objects.get()與objects.filter()之間的區(qū)別介紹
- 教你安裝python Django(圖文)
- Django框架中render_to_response()函數(shù)的使用方法
- Django靜態(tài)資源URL STATIC_ROOT的配置方法
- 解決Django migrate No changes detected 不能創(chuàng)建表的問題
- django啟動uwsgi報錯的解決方法
- 詳解Django框架中用戶的登錄和退出的實現(xiàn)
- Django讀取Mysql數(shù)據(jù)并顯示在前端的實例
- Django小白教程之Django用戶注冊與登錄
- Python3+Django get/post請求實現(xiàn)教程詳解
相關(guān)文章
使用Python打造高效多進(jìn)程TCP服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)多進(jìn)程的TCP服務(wù)器,通過為每個連接進(jìn)來的客戶端分配一個進(jìn)程,實現(xiàn)并發(fā)處理多個客戶端請求的能力,感興趣的可以了解下2024-01-01Anaconda和ipython環(huán)境適配的實現(xiàn)
這篇文章主要介紹了Anaconda和ipython環(huán)境適配的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04簡單的Python動態(tài)可視化神器,編程小白也能上手
這篇文章就來介紹簡單的Python動態(tài)可視化神器,最近發(fā)現(xiàn)了一個寶藏動態(tài)可視化庫,非常簡單,即使是小白也能輕松上手。這個庫就是motionchart,它能夠用 pandas 的 dataframe 數(shù)據(jù)直接創(chuàng)建交互式的動態(tài)圖表,下面來簡單看一下如何使用。2021-10-10使用__init__.py將文件夾設(shè)置成Python模塊示例詳解
這篇文章主要為大家介紹了使用__init__.py將文件夾設(shè)置成Python模塊示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09使用Python串口實時顯示數(shù)據(jù)并繪圖的例子
今天小編就為大家分享一篇使用Python串口實時顯示數(shù)據(jù)并繪圖的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12PyCharm2021最新激活碼+激活碼補(bǔ)丁(親測最新版PyCharm2021.3激活成功)
這篇文章主要介紹了PyCharm2021最新激活碼+激活碼補(bǔ)丁,親測最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09Django + Uwsgi + Nginx 實現(xiàn)生產(chǎn)環(huán)境部署的方法
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比較常見的一種方式。這篇文章主要介紹了Django + Uwsgi + Nginx 實現(xiàn)生產(chǎn)環(huán)境部署,感興趣的小伙伴們可以參考一下2018-06-06