Django中更新多個(gè)對(duì)象數(shù)據(jù)與刪除對(duì)象的方法
更新多個(gè)對(duì)象
例如說我們現(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)
在這個(gè)例子里我們可以看到Django的save()方法更新了不僅僅是name列的值,還有更新了所有的列。 若name以外的列有可能會(huì)被其他的進(jìn)程所改動(dòng)的情況下,只更改name列顯然是更加明智的。 更改某一指定的列,我們可以調(diào)用結(jié)果集(QuerySet)對(duì)象的update()方法: 示例如下:
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
與之等同的SQL語句變得更高效,并且不會(huì)引起競(jìng)態(tài)條件。
UPDATE books_publisher SET name = 'Apress Publishing' WHERE id = 52;
update()方法對(duì)于任何結(jié)果集(QuerySet)均有效,這意味著你可以同時(shí)更新多條記錄。 以下示例演示如何將所有Publisher的country字段值由'U.S.A'更改為'USA':
>>> Publisher.objects.all().update(country='USA') 2
update()方法會(huì)返回一個(gè)整型數(shù)值,表示受影響的記錄條數(shù)。 在上面的例子中,這個(gè)值是2。
刪除對(duì)象
刪除數(shù)據(jù)庫中的對(duì)象只需調(diào)用該對(duì)象的delete()方法即可:
>>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() >>> Publisher.objects.all() [<Publisher: Apress Publishing>]
同樣我們可以在結(jié)果集上調(diào)用delete()方法同時(shí)刪除多條記錄。這一點(diǎn)與我們上一小節(jié)提到的update()方法相似:
>>> Publisher.objects.filter(country='USA').delete() >>> Publisher.objects.all().delete() >>> Publisher.objects.all() []
刪除數(shù)據(jù)時(shí)要謹(jǐn)慎! 為了預(yù)防誤刪除掉某一個(gè)表內(nèi)的所有數(shù)據(jù),Django要求在刪除表內(nèi)所有數(shù)據(jù)時(shí)顯示使用all()。 比如,下面的操作將會(huì)出錯(cuò):
>>> Publisher.objects.delete() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'Manager' object has no attribute 'delete'
而一旦使用all()方法,所有數(shù)據(jù)將會(huì)被刪除:
>>> Publisher.objects.all().delete()
如果只需要?jiǎng)h除部分的數(shù)據(jù),就不需要調(diào)用all()方法。再看一下之前的例子:
>>> Publisher.objects.filter(country='USA').delete()
- 對(duì)Django 中request.get和request.post的區(qū)別詳解
- 基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例
- 教你如何將 Sublime 3 打造成 Python/Django IDE開發(fā)利器
- Python+Django在windows下的開發(fā)環(huán)境配置圖解
- python Django連接MySQL數(shù)據(jù)庫做增刪改查
- Django如何自定義model創(chuàng)建數(shù)據(jù)庫索引的順序
- Django中對(duì)數(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啟動(dòng)uwsgi報(bào)錯(cuò)的解決方法
- 詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
- Django讀取Mysql數(shù)據(jù)并顯示在前端的實(shí)例
- Django小白教程之Django用戶注冊(cè)與登錄
- Python3+Django get/post請(qǐng)求實(shí)現(xiàn)教程詳解
相關(guān)文章
對(duì)Python的交互模式和直接運(yùn)行.py文件的區(qū)別詳解
今天小編就為大家分享一篇對(duì)Python的交互模式和直接運(yùn)行.py文件的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
使用python把Excel中的數(shù)據(jù)在頁面中可視化
最近學(xué)習(xí)數(shù)據(jù)分析,感覺Python做數(shù)據(jù)分析真的好用,下面這篇文章主要給大家介紹了關(guān)于如何使用python把Excel中的數(shù)據(jù)在頁面中可視化的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python PyWebIO實(shí)現(xiàn)網(wǎng)頁版數(shù)據(jù)查詢器
PyWebIO提供了一系列命令式的交互函數(shù)來在瀏覽器上獲取用戶輸入和進(jìn)行輸出,將瀏覽器變成了一個(gè)“富文本終端”,可以用于構(gòu)建簡(jiǎn)單的Web應(yīng)用或基于瀏覽器的GUI應(yīng)用。本文將利用PyWebIO制作一個(gè)網(wǎng)頁版的數(shù)據(jù)查詢器,感興趣的可以學(xué)習(xí)一下2021-12-12
Pandas?Matplotlib保存圖形時(shí)坐標(biāo)軸標(biāo)簽太長(zhǎng)導(dǎo)致顯示不全問題的解決
在使用matplotlib作圖的時(shí)候,有的時(shí)候會(huì)遇到畫圖時(shí)顯示不全和圖片保存時(shí)不完整的問題,這篇文章主要給大家介紹了關(guān)于Pandas?Matplotlib保存圖形時(shí)坐標(biāo)軸標(biāo)簽太長(zhǎng)導(dǎo)致顯示不全問題的解決方法,需要的朋友可以參考下2022-06-06
python使用requests設(shè)置讀取超時(shí)時(shí)間
在Python中,使用requests庫進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),可以通過設(shè)置?timeout參數(shù)來指定讀取超時(shí)時(shí)間,本文就來介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
利用OpenCV和Python實(shí)現(xiàn)查找圖片差異
今天小編就為大家分享一篇利用OpenCV和Python實(shí)現(xiàn)查找圖片差異,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
LyScript實(shí)現(xiàn)繞過反調(diào)試保護(hù)的示例詳解
LyScript插件中內(nèi)置的方法可實(shí)現(xiàn)各類反調(diào)試以及屏蔽特定API函數(shù)的功能,這類功能在應(yīng)對(duì)病毒等惡意程序時(shí)非常有效。本文為大家提供了LyScript實(shí)現(xiàn)繞過反調(diào)試保護(hù)的示例代碼,感興趣的可以了解一下2022-08-08

