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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django數(shù)據(jù)庫(kù)操作之save與update的使用

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

Python框架Django有著諸多優(yōu)點(diǎn),它提供的models可以讓開發(fā)者方便地操作數(shù)據(jù)庫(kù),但正是由于對(duì)上層的良好的封裝,使得提升數(shù)據(jù)庫(kù)操作性能必須要清楚地知道Django的數(shù)據(jù)庫(kù)操作到底執(zhí)行了哪些SQL語句。

例如數(shù)據(jù)更新操作,對(duì)單條記錄,可以使用save或者是update兩種方式

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

如有一張表名叫做Example

使用save:

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

執(zhí)行的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()的時(shí)候提交更新的內(nèi)容,發(fā)現(xiàn)更新的時(shí)候把Example中的有字段都SET賦值的一次

使用update

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

執(zhí)行的SQL語句是:

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

這條SQL語句簡(jiǎn)短而且執(zhí)行速度要優(yōu)于使用save的速度。

從SQL的執(zhí)行情況來看,使用upate是要優(yōu)于save方式的。

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

在使用Django的數(shù)據(jù)模型操作數(shù)據(jù)庫(kù)時(shí),了解這些底層的SQL操作很有必要。

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

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

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

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

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.

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

save(commit=False)方法實(shí)際應(yīng)用案例

下面我們來看一個(gè)實(shí)際應(yīng)用案例。我們創(chuàng)建了一個(gè)叫文章Article的模型,里面包含title, body和作者author等多個(gè)字段,其中author字段非空null=False。我們由Article模型創(chuàng)建了一個(gè)ArticleForm表單,可以讓用戶發(fā)表新文章,但是我們故意把a(bǔ)uthor字段除外了,因?yàn)槲覀儾幌M脩艟庉嬜髡摺?/p>

最后用戶提交的表單數(shù)據(jù)里肯定沒有author,當(dāng)這樣的數(shù)據(jù)提交到數(shù)據(jù)庫(kù)時(shí)肯定會(huì)有問題的。所以我們先通過 article = form.save(commit=False)創(chuàng)建article實(shí)例,此時(shí)讓Django先不要發(fā)送數(shù)據(jù)到數(shù)據(jù)庫(kù),等待我們把a(bǔ)uthor添加好后,再把數(shù)據(jù)一起存儲(chǔ)到數(shù)據(jù)庫(kù)中。

下面是視圖文件views.py的代碼。最重要的是ArticleForm構(gòu)成和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先不提交到數(shù)據(jù)庫(kù). article.author = request.user # 添加額外數(shù)據(jù) article.save() # 發(fā)送到數(shù)據(jù)庫(kù) 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)

何時(shí)使用save_m2m方法及如何使用

save_m2m方法只用來存儲(chǔ)多對(duì)多的關(guān)系。當(dāng)你同時(shí)滿足下面兩個(gè)條件時(shí),你需要使用此方法。如果你直接使用save()或form_valid()方法,是可以直接存儲(chǔ)多對(duì)多(m2m)關(guān)系的,不需要用save_m2m。

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

你的model里有多對(duì)多的關(guān)系(比如tags)

假設(shè)我們文章模型里有tags這個(gè)多對(duì)多的字段,我們的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數(shù)據(jù)庫(kù)操作之save與update的使用就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
快播电影网址老女人久久| 在线视频亚洲欧美中文| 国产欧美二区| 欧美激情三区| 国产精品一国产精品k频道56| 日韩av不卡在线观看| 五月亚洲婷婷 | 人人爽香蕉精品| 亚洲一区av| 欧美一区=区三区| 精品丝袜久久| 99久久精品网站| 日韩视频不卡| 少妇精品久久久一区二区| 青青草国产成人99久久| 欧美a级一区二区| 另类专区亚洲| 999久久久亚洲| 亚洲欧美日本视频在线观看| 五月国产精品| 精品三级av在线导航| 韩国精品主播一区二区在线观看 | 野花国产精品入口| 久久久夜夜夜| 樱桃成人精品视频在线播放| 免费观看在线综合色| 亚洲精品第一| 美国三级日本三级久久99 | 首页国产精品| 日韩午夜黄色| 日本精品一区二区三区在线观看视频| 国产精品一区二区三区美女| 成午夜精品一区二区三区软件| 国产99亚洲| 蜜桃视频在线观看一区| 欧美国产先锋| 欧美一区三区| 欧美日韩伊人| 欧美手机在线| 国产乱人伦丫前精品视频| 久久久夜夜夜| 日本va欧美va瓶| 国产精品调教| 精品国产精品国产偷麻豆| 久久伊人久久| av一区在线| 亚洲久久视频| 日韩免费看片| 天堂va欧美ⅴa亚洲va一国产| 日本不卡视频在线观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美三区四区| 亚洲日本三级| 日韩一区二区三区在线免费观看| 亚洲狼人精品一区二区三区| 精品理论电影在线| 在线视频日韩| 成人亚洲一区| 日韩区一区二| 99久久99视频只有精品| 久久国产生活片100| 久久久久久美女精品| 91九色综合| 99视频在线精品国自产拍免费观看| 欧美成人一二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品99一区二区三区| 天堂俺去俺来也www久久婷婷| 色吊丝一区二区| 麻豆久久一区二区| 亚洲久久一区| 韩日一区二区三区| 超级白嫩亚洲国产第一| 欧美偷窥清纯综合图区| 99国产成+人+综合+亚洲欧美| 国产一区二区久久久久| 四虎在线精品| 好看不卡的中文字幕| 亚洲精品**中文毛片| 国产欧美成人| 色8久久久久| 亚洲欧美日韩国产综合精品二区| 高清av不卡| 美女毛片一区二区三区四区最新中文字幕亚洲| 在线精品一区二区| 欧美日韩国产传媒| 中文字幕在线高清| 久久中文欧美| 国产精一区二区| 亚洲精品观看| 噜噜噜久久亚洲精品国产品小说| 精品亚洲a∨一区二区三区18| 日韩avvvv在线播放| 亚洲在线免费| 不卡中文一二三区| 蜜桃精品在线| 天堂√8在线中文| 国产一区二区精品久| 久久精品一区二区国产| 久久精品97| 奇米狠狠一区二区三区| 蜜臀av国产精品久久久久| 午夜久久美女| 激情欧美丁香| 欧美+日本+国产+在线a∨观看| 日韩一区电影| 日本一区二区免费高清| 麻豆一区二区在线| 卡一精品卡二卡三网站乱码| 美女视频免费精品| 久久wwww| 欧美a在线观看| 国产精品15p| 欧美国产专区| 国产精品毛片在线| 久久国产精品免费精品3p| 亚洲福利专区| 久久香蕉国产| 国产专区一区| 亚洲无线一线二线三线区别av| 久久久久国产一区二区| 成人在线黄色| 成人国产综合| 成人日韩精品| 欧美日韩精品一区二区视频| 136国产福利精品导航网址| 91成人超碰| 麻豆9191精品国产| 亚洲九九精品| 欧美影院精品| 国产精品xvideos88| 免费在线成人| 成人午夜在线| 亚洲精品88| 亚洲一本视频| 日韩中文字幕麻豆| 日韩黄色av| 国产精品视频一区二区三区综合 | 97精品国产| 国产尤物精品| 久久www成人_看片免费不卡| 亚洲尤物av| 国产美女久久| 国产一区丝袜| 亚洲天堂黄色| 亚洲欧洲免费| 免费亚洲一区| se01亚洲视频| 久久大逼视频| 日本视频在线一区| 久久亚洲人体| 欧美午夜精彩| 在线视频免费在线观看一区二区| 亚洲人成精品久久久| 国产无遮挡裸体免费久久 | 国产福利资源一区| 一区二区三区四区日本视频| 精品丝袜在线| 亚洲免费影视| 国产精品一区二区美女视频免费看 | 国产高清亚洲| 亚洲综合在线电影| 首页欧美精品中文字幕| 青青草精品视频| 成人精品高清在线视频| 一区在线视频观看| 久久国产精品免费一区二区三区| 国产精选在线| 一区二区三区四区日韩| 麻豆久久一区二区| 黄色日韩在线| 国产福利一区二区三区在线播放| 日韩不卡在线| 亚洲91网站| 日韩欧美一区二区三区在线观看| 久久激情一区| 日韩不卡一区二区三区 | 亚洲欧美日韩一区在线观看| 国产欧美一区二区精品久久久 | 日韩不卡在线| 日本成人中文字幕| 免费在线播放第一区高清av| 欧美精品一区二区三区精品| 国产欧美日韩在线一区二区| 视频福利一区| 国产亚洲精品美女久久| 国产v日韩v欧美v| 丝瓜av网站精品一区二区| 久久国产精品美女| 91亚洲一区| 国产黄大片在线观看| 另类国产ts人妖高潮视频| 国产精品啊啊啊| 香蕉成人久久| 国产粉嫩在线观看| 欧美日韩1区2区3区| 99国产精品视频免费观看一公开| 欧美成人一二区| 亚洲精品影视| 婷婷激情综合|