在Python的Django框架中更新數(shù)據(jù)庫數(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ù)庫做修改。 在調(diào)用`` save()`` 方法之前,記錄并沒有保存至數(shù)據(jù)庫,像這樣:
>>> 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ù)庫,并更新之中的數(shù)據(jù)是必要的,但是,對(duì)于 Web 應(yīng)用程序來說,更多的時(shí)候是在檢索查詢數(shù)據(jù)庫。 我們已經(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ù)庫中所有的記錄。 盡管這個(gè)對(duì)象 看起來 象一個(gè)列表(list),它實(shí)際是一個(gè) QuerySet 對(duì)象, 這個(gè)對(duì)象是數(shù)據(jù)庫中一些記錄的集合。
- 使用python和Django完成博客數(shù)據(jù)庫的遷移方法
- python django 增刪改查操作 數(shù)據(jù)庫Mysql
- Python的Django框架中使用SQLAlchemy操作數(shù)據(jù)庫的教程
- Python的Django框架中的數(shù)據(jù)庫配置指南
- Python的Django框架可適配的各種數(shù)據(jù)庫介紹
- 用實(shí)例詳解Python中的Django框架中prefetch_related()函數(shù)對(duì)數(shù)據(jù)庫查詢的優(yōu)化
- python web應(yīng)用程序之Django數(shù)據(jù)庫詳解
相關(guān)文章
PyTorch 中的傅里葉卷積實(shí)現(xiàn)示例
這篇文章主要介紹了PyTorch 中的傅里葉卷積實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12python語言變量和數(shù)據(jù)類型基礎(chǔ)學(xué)習(xí)
這篇文章主要為大家介紹了python語言變量和數(shù)據(jù)類型基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10詳解Python中數(shù)據(jù)的多種存儲(chǔ)形式
這篇文章主要介紹了Python中數(shù)據(jù)的多種存儲(chǔ)形式,主要有JSON?文件存儲(chǔ)、CSV?文件存儲(chǔ)、關(guān)系型數(shù)據(jù)庫存儲(chǔ)及非關(guān)系型數(shù)據(jù)庫存儲(chǔ),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05python實(shí)現(xiàn)的生成隨機(jī)迷宮算法核心代碼分享(含游戲完整代碼)
這篇文章主要介紹了python實(shí)現(xiàn)的隨機(jī)迷宮生成算法核心代碼分享,本文包含一個(gè)簡(jiǎn)單迷宮游戲完整代碼,需要的朋友可以參考下2014-07-07Linux RedHat下安裝Python2.7開發(fā)環(huán)境
這篇文章主要為大家詳細(xì)介紹了Linux RedHat下安裝Python2.7、pip、ipython環(huán)境、eclipse和PyDev環(huán)境,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05PyQt5+serial模塊實(shí)現(xiàn)一個(gè)串口小工具
這篇文章主要為大家詳細(xì)介紹了如何利用PyQt5和serial模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的串口小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-01-01