在Python的Django框架中更新數(shù)據(jù)庫(kù)數(shù)據(jù)的方法
先使用一些關(guān)鍵參數(shù)創(chuàng)建對(duì)象實(shí)例,如下:
>>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... city='Berkeley', ... state_province='CA', ... country='U.S.A.', ... website='http://www.apress.com/')
這個(gè)對(duì)象實(shí)例并 沒有 對(duì)數(shù)據(jù)庫(kù)做修改。 在調(diào)用`` save()`` 方法之前,記錄并沒有保存至數(shù)據(jù)庫(kù),像這樣:
>>> p.save()
在SQL里,這大致可以轉(zhuǎn)換成這樣:
INSERT INTO books_publisher
(name, address, city, state_province, country, website)
VALUES
('Apress', '2855 Telegraph Ave.', 'Berkeley', 'CA',
'U.S.A.', 'http://www.apress.com/');
因?yàn)?Publisher 模型有一個(gè)自動(dòng)增加的主鍵 id ,所以第一次調(diào)用 save() 還多做了一件事: 計(jì)算這個(gè)主鍵的值并把它賦值給這個(gè)對(duì)象實(shí)例:
>>> p.id 52 # this will differ based on your own data
接下來再調(diào)用 save() 將不會(huì)創(chuàng)建新的記錄,而只是修改記錄內(nèi)容(也就是 執(zhí)行 UPDATE SQL語句,而不是 INSERT 語句):
>>> p.name = 'Apress Publishing' >>> p.save()
前面執(zhí)行的 save() 相當(dāng)于下面的SQL語句:
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;
注意,并不是只更新修改過的那個(gè)字段,所有的字段都會(huì)被更新。 這個(gè)操作有可能引起競(jìng)態(tài)條件,這取決于你的應(yīng)用程序。 請(qǐng)參閱后面的“更新多個(gè)對(duì)象”小節(jié)以了解如何實(shí)現(xiàn)這種輕量的修改(只修改對(duì)象的部分字段)。
UPDATE books_publisher SET name = 'Apress Publishing' WHERE id=52;
選擇對(duì)象
當(dāng)然,創(chuàng)建新的數(shù)據(jù)庫(kù),并更新之中的數(shù)據(jù)是必要的,但是,對(duì)于 Web 應(yīng)用程序來說,更多的時(shí)候是在檢索查詢數(shù)據(jù)庫(kù)。 我們已經(jīng)知道如何從一個(gè)給定的模型中取出所有記錄:
>>> Publisher.objects.all() [<Publisher: Apress>, <Publisher: O'Reilly>]
這相當(dāng)于這個(gè)SQL語句:
SELECT id, name, address, city, state_province, country, website FROM books_publisher;
注意
注意到Django在選擇所有數(shù)據(jù)時(shí)并沒有使用 SELECT* ,而是顯式列出了所有字段。 設(shè)計(jì)的時(shí)候就是這樣: SELECT* 會(huì)更慢,而且最重要的是列出所有字段遵循了Python 界的一個(gè)信條: 明言勝于暗示。
有關(guān)Python之禪(戒律) :-),在Python提示行輸入 import this 試試看。
讓我們來仔細(xì)看看 Publisher.objects.all() 這行的每個(gè)部分:
- 首先,我們有一個(gè)已定義的模型 Publisher 。沒什么好奇怪的: 你想要查找數(shù)據(jù), 你就用模型來獲得數(shù)據(jù)。
- 然后,是objects屬性。 它被稱為管理器,我們將在第10章中詳細(xì)討論它。 目前,我們只需了解管理器管理著所有針對(duì)數(shù)據(jù)包含、還有最重要的數(shù)據(jù)查詢的表格級(jí)操作。
- 所有的模型都自動(dòng)擁有一個(gè) objects 管理器;你可以在想要查找數(shù)據(jù)時(shí)使用它。
- 最后,還有 all() 方法。這個(gè)方法返回返回?cái)?shù)據(jù)庫(kù)中所有的記錄。 盡管這個(gè)對(duì)象 看起來 象一個(gè)列表(list),它實(shí)際是一個(gè) QuerySet 對(duì)象, 這個(gè)對(duì)象是數(shù)據(jù)庫(kù)中一些記錄的集合。
- 使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移方法
- python django 增刪改查操作 數(shù)據(jù)庫(kù)Mysql
- Python的Django框架中使用SQLAlchemy操作數(shù)據(jù)庫(kù)的教程
- Python的Django框架中的數(shù)據(jù)庫(kù)配置指南
- Python的Django框架可適配的各種數(shù)據(jù)庫(kù)介紹
- 用實(shí)例詳解Python中的Django框架中prefetch_related()函數(shù)對(duì)數(shù)據(jù)庫(kù)查詢的優(yōu)化
- python web應(yīng)用程序之Django數(shù)據(jù)庫(kù)詳解
相關(guān)文章
運(yùn)用Python的webbrowser實(shí)現(xiàn)定時(shí)打開特定網(wǎng)頁(yè)
今天小編就為大家分享一篇運(yùn)用Python的webbrowser實(shí)現(xiàn)定時(shí)打開特定網(wǎng)頁(yè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
python修改pip install默認(rèn)安裝路徑的詳細(xì)步驟
pip安裝的第三方庫(kù)默認(rèn)存放在C盤中,為了便于管理和不過度占用C盤空間所以想修改默認(rèn)的pip路徑,文章通過圖文結(jié)合的方式給大家介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
Python矩陣常見運(yùn)算操作實(shí)例總結(jié)
這篇文章主要介紹了Python矩陣常見運(yùn)算操作,結(jié)合實(shí)例形式總結(jié)分析了Python矩陣的創(chuàng)建以及相乘、求逆、轉(zhuǎn)置等相關(guān)操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09
Python實(shí)現(xiàn)查找并刪除重復(fù)文件的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個(gè)簡(jiǎn)單的腳本來查找并刪除指定目錄及其子目錄中的重復(fù)文件,需要的可以參考一下2025-03-03
python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題
這篇文章主要介紹了python執(zhí)行js腳本報(bào)錯(cuò)CryptoJS is not defined問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Python PyInstaller庫(kù)基本使用方法分析
這篇文章主要介紹了Python PyInstaller庫(kù)基本使用方法,結(jié)合實(shí)例形式分析了Python PyInstaller庫(kù)的功能、安裝及相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2019-12-12
使用pytorch完成kaggle貓狗圖像識(shí)別方式
今天小編就為大家分享一篇使用pytorch完成kaggle貓狗圖像識(shí)別方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01

