日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django數據庫操作之save與update的使用

瀏覽:25日期:2024-10-14 08:00:26

Python框架Django有著諸多優點,它提供的models可以讓開發者方便地操作數據庫,但正是由于對上層的良好的封裝,使得提升數據庫操作性能必須要清楚地知道Django的數據庫操作到底執行了哪些SQL語句。

例如數據更新操作,對單條記錄,可以使用save或者是update兩種方式

在Django工程下的settings.py下將log設置為DEBUG,即可查看save和update分別執行了哪些SQL語句

如有一張表名叫做Example

使用save:

k = Example.objects.get(id=481)k.total_calories = 12k.save()

執行的SQL語句如下所示:

SELECT (1) AS `a` FROM `Example` WHERE `Example`.`id` = 481 LIMIT 1; args=(481,)UPDATE `Example` SET `user_id` = asdfasdf, `event_id` = -1, `join_type` = 0, `name` = , `phone` = , `email` = , `company_name` = , `address` = , `if_type` = 0, `code` = , `location` = , `total_days` = 0, `total_length` = 0, `total_calories` = 12, `comments` = , `reserved_1` = , `reserved_2` = , `reserved_3` = , `reserved_4` = , `reserved_5` = , `create_datetime` = 2015-02-02 17:43:53 WHERE `Example`.`id` = 481 ; args=(u’asdfasdf’, -1, 0, u’’, u’’, u’’, u’’, u’’, 0, u’’, u’’, 0, 0, 12, u’’, u’’, u’’, u’’, u’’, u’’, u’2015-02-02 17:43:53’, 481)

首先要查詢k這條記錄,然后save()的時候提交更新的內容,發現更新的時候把Example中的有字段都SET賦值的一次

使用update

Example.objects.filter(id=481).update(total_calories = 10)

執行的SQL語句是:

UPDATE `Example` SET `total_calories` = 10 WHERE (`Example`.`user_id` = asdfasdfAND `Example`.`id` = 481 ); args=(10, u’asdfasdf’, 481)

這條SQL語句簡短而且執行速度要優于使用save的速度。

從SQL的執行情況來看,使用upate是要優于save方式的。

從使用情境上看,update更加適用于批量數據更新,而save則更適合當然也只適合做單條記錄的數據更新操作了。

在使用Django的數據模型操作數據庫時,了解這些底層的SQL操作很有必要。

補充知識:如何理解Django的save(commit=False)方法和save_m2m()方法

什么時候使用save(commit=False)方法,save_m2m方法以及如何使用是Django表單forms進階必需了解的知識。我們今天就帶你來看一看。

何時使用save(commit=False)方法

Stackoverflow上其實已經有了一段非常精煉的答案。英文原文如下,我把它翻譯了一下:

That’s useful when you get most of your model data from a form, but need to populate some null=False fields with non-form data. Saving with commit=False gets you a model object, then you can add your extra data and save it.

當你通過表單獲取你的模型數據,但是需要給模型里null=False字段添加一些非表單的數據,該方法會非常有用。如果你指定commit=False,那么save方法不會理解將表單數據存儲到數據庫,而是給你返回一個當前對象。這時你可以添加表單以外的額外數據,再一起存儲。

save(commit=False)方法實際應用案例

下面我們來看一個實際應用案例。我們創建了一個叫文章Article的模型,里面包含title, body和作者author等多個字段,其中author字段非空null=False。我們由Article模型創建了一個ArticleForm表單,可以讓用戶發表新文章,但是我們故意把author字段除外了,因為我們不希望用戶編輯作者。

最后用戶提交的表單數據里肯定沒有author,當這樣的數據提交到數據庫時肯定會有問題的。所以我們先通過 article = form.save(commit=False)創建article實例,此時讓Django先不要發送數據到數據庫,等待我們把author添加好后,再把數據一起存儲到數據庫中。

下面是視圖文件views.py的代碼。最重要的是ArticleForm構成和article_create方法。

from .models import Articlefrom django.forms import ModelFormfrom django.http import HttpResponseRedirectfrom django.shortcuts import renderclass ArticleForm(ModelForm): class Meta: model = Article exclude = [’author’]def article_create(request): if request.method == ’POST’: form = ArticleForm(request.POST) if form.is_valid(): article = form.save(commit=False) # commit=False告訴Django先不提交到數據庫. article.author = request.user # 添加額外數據 article.save() # 發送到數據庫 return HttpResponseRedirect('/blog/') else: form = ArticleForm() return render(request, ’blog/article_create_form.html’, {’form’: form})

如果你使用Django自帶的基于類的視圖(CBV), 你可以使用form_valid方法完成上述同樣的操作。具體代碼如下。

from django.views.generic.edit import CreateViewfrom .models import Articlefrom django.forms import ModelForm# Create your views here.class ArticleForm(ModelForm): class Meta: model = Article exclude = [’author’] class ArticleCreateView(CreateView): model = Article form_class = ArticleForm template_name = ’blog/article_create_form.html’ # Associate form.instance.user with self.request.user def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form)

何時使用save_m2m方法及如何使用

save_m2m方法只用來存儲多對多的關系。當你同時滿足下面兩個條件時,你需要使用此方法。如果你直接使用save()或form_valid()方法,是可以直接存儲多對多(m2m)關系的,不需要用save_m2m。

你使用了save(commit=False)方法

你的model里有多對多的關系(比如tags)

假設我們文章模型里有tags這個多對多的字段,我們的article_create方法需要增加一行。

def article_create(request): if request.method == ’POST’: form = ArticleForm(request.POST) if form.is_valid(): article = form.save(commit=False) # commit=False tells Django that 'Don’t send this to database yet. article.author = request.user # Set the user object here article.save() # Now you can send it to DB form.save_m2m() return HttpResponseRedirect('/blog/') else: form = ArticleForm() return render(request, ’blog/article_create_form.html’, {’form’: form})

以上這篇Django數據庫操作之save與update的使用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91精品99| 精品网站999| 欧美一区三区| 亚洲手机在线| 亚洲精品一区二区妖精| 一区二区三区四区在线看| 欧美午夜精品一区二区三区电影| 欧美日韩尤物久久| 日韩电影免费在线观看| 在线成人动漫av| 中国女人久久久| 亚洲三级网站| 国产欧美在线观看免费| 国产精品亲子伦av一区二区三区| 麻豆国产精品视频| 神马久久午夜| 91久久在线| 日本成人一区二区| 久久99性xxx老妇胖精品| 久久精品三级| 日本久久成人网| 丝瓜av网站精品一区二区| 亚洲免费福利一区| 青草综合视频| 精品久久久久久久| 久久久亚洲一区| 久久国产精品久久久久久电车| 日韩国产高清在线| 福利精品一区| 夜久久久久久| 国产欧美久久一区二区三区| 国产va免费精品观看精品视频| 欧美天堂视频| 免费日韩一区二区| 国产精品一级| 亚洲91精品| 日本不卡高清视频| 韩国久久久久久| 亚洲激情不卡| 国产精品中文字幕制服诱惑| 欧美aa在线观看| 亚洲精品影院在线观看| 国内精品伊人| 蜜臀av国产精品久久久久| 国产精品视频一区二区三区四蜜臂| 都市激情国产精品| 亚洲一区二区小说| 精品国产99| 先锋影音国产一区| 久久99国产精品视频| 99亚洲视频| 老色鬼精品视频在线观看播放| 久久国产电影| 青青伊人久久| 伊人精品一区| 国产福利亚洲| 免费黄网站欧美| 亚洲三级欧美| 日韩av一区二区三区四区| 伊人久久大香线蕉av不卡| 国产精品99精品一区二区三区∴| 国产中文一区| 久久精品一区二区国产| 国产亚洲在线观看| 91视频一区| 91精品丝袜国产高跟在线| 午夜av一区| 国产日韩电影| 日本成人中文字幕在线视频| 欧洲在线一区| 久久精品一区二区三区中文字幕| 亚洲综合福利| 欧美精品一卡| sm久久捆绑调教精品一区| 日韩av资源网| 亚洲一区国产| 亚洲成人va| 精品一区二区三区中文字幕视频| 免费成人在线影院| 亚洲网站视频| 精品国产精品国产偷麻豆| 日本成人手机在线| 香蕉成人久久| 日韩另类视频| 精品美女视频| 国产精品久久久久久久久久妞妞| 亚洲字幕久久| 视频一区二区中文字幕| 五月天久久网站| 久久久久99| 在线看片福利| 97国产成人高清在线观看| 国产精久久一区二区| 亚洲精品极品| 伊人久久大香线蕉av超碰演员| 92国产精品| 牛牛精品成人免费视频| 日本欧美大码aⅴ在线播放| 亚洲精品888| 日韩另类视频| 日韩啪啪电影网| 国产专区精品| 国产一区二区久久久久| 欧美黑人巨大videos精品| 91麻豆精品激情在线观看最新| 免费人成在线不卡| 日韩中文字幕一区二区三区| aa亚洲婷婷| 视频在线观看一区| 中文视频一区| 亚洲美女久久| 日本免费一区二区视频| 日本亚洲欧洲无免费码在线| 午夜一级在线看亚洲| 国产午夜精品一区二区三区欧美 | 婷婷综合网站| 欧美亚洲国产激情| 精品一区欧美| 亚洲精品小说| 视频一区在线播放| 综合在线一区| 欧美欧美黄在线二区| 日韩不卡一区二区| 91成人在线| 国产精品扒开腿做爽爽爽软件| 91亚洲精品视频在线观看| 国产探花在线精品| 国产精品**亚洲精品| 精品国产美女a久久9999| yellow在线观看网址| 久久久久蜜桃| 国产农村妇女精品一二区| 免费的成人av| 欧美专区一区| 美女av一区| 国产在线|日韩| 在线综合欧美| 日本不卡视频在线观看| 国产精品美女久久久久久不卡| 欧美激情三区| 精品国产99| 欧美日韩一二| 最新国产精品| 国产精品a级| 偷拍精品精品一区二区三区| 欧美二区视频| 亚洲精品高潮| 久久不见久久见免费视频7| 国产精品99一区二区三| 99久久99久久精品国产片果冰| 亚洲一区成人| 国产日本亚洲| 日韩一区电影| 在线精品一区| 麻豆国产精品777777在线| 亚洲午夜天堂| 久久亚洲欧美| 国产精品一区二区中文字幕| 鲁鲁在线中文| 首页欧美精品中文字幕| 国产精品www994| 日本少妇一区| 亚洲免费福利一区| 日韩成人免费| 蜜臀精品一区二区三区在线观看| 国产精品免费不| 免费欧美一区| 国产精品一区三区在线观看| 99久久九九| 国产亚洲久久| 久久精品91| 久久国产尿小便嘘嘘| 日韩一区二区三区在线免费观看| 免费看黄色91| 久久精品三级| 美女精品在线| 动漫av一区| 老司机精品久久| 精品黄色一级片| 男人天堂欧美日韩| 麻豆精品在线观看| 美女久久一区| 亚洲一区资源| 日本成人手机在线| 婷婷成人在线| 日本欧美在线| 欧美91福利在线观看| 国产精品va视频| 免费看的黄色欧美网站| 国产精品99一区二区三区| 日韩有码av| 激情五月综合网| 久久精品五月| 日韩高清中文字幕一区| 亚洲女同一区| 日韩综合在线| 欧美日韩网址| 国产午夜精品一区二区三区欧美| 国产+成+人+亚洲欧洲在线| 日韩美女国产精品|