欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何使用djangoORM中values和annotate-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了如何使用django ORM中values和annotate,內(nèi)容簡(jiǎn)而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來(lái)看看吧。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比廬山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式廬山網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋廬山地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

任務(wù)需求:項(xiàng)目中有個(gè)問(wèn)題表,存儲(chǔ)所有的問(wèn)題,以_id為編號(hào),由于_id未做唯一校驗(yàn),所以早期數(shù)據(jù)有多個(gè)問(wèn)題使用同一編號(hào)的情況。

需求就是找出編號(hào)有重復(fù)的數(shù)據(jù),只保留第一個(gè)

開(kāi)始之前

使用了values和annotate兩個(gè)函數(shù)

簡(jiǎn)單的來(lái)說(shuō)values可以理解成展示models指定列的值

annotate起到了group by的作用,

所以我做的事就是對(duì)指定字段按個(gè)數(shù)進(jìn)行統(tǒng)計(jì),然后留下重復(fù)編號(hào)的數(shù)據(jù),進(jìn)行清洗

看看數(shù)據(jù)庫(kù)數(shù)據(jù)

如何使用django ORM中values和annotate

查看每條數(shù)據(jù)的_id的值

如何使用django ORM中values和annotate

對(duì)_id數(shù)據(jù)條數(shù)進(jìn)行統(tǒng)計(jì)

如何使用django ORM中values和annotate

轉(zhuǎn)換數(shù)據(jù)格式為list

如何使用django ORM中values和annotate

Emmm。。。我只需要重復(fù)數(shù)據(jù),所以把_id唯一的數(shù)據(jù)剔除

寫(xiě)個(gè)簡(jiǎn)單的遍歷

如何使用django ORM中values和annotate

然后只需要找到這些數(shù)據(jù),對(duì)每個(gè)_id只留下第一條數(shù)據(jù)

導(dǎo)出sql,做個(gè)備份,開(kāi)始刪除數(shù)據(jù)

最終處理:

如何使用django ORM中values和annotate

刪除過(guò)程:

如何使用django ORM中values和annotate

再回到網(wǎng)站看看數(shù)據(jù)清洗后的效果

如何使用django ORM中values和annotate

補(bǔ)充知識(shí):django中annotate的一點(diǎn)使用方法

annotate 使用方法:

有時(shí)候我們需要連接兩個(gè)表做一些查詢,比如博客中有兩個(gè)模型,一個(gè)文章模型,一個(gè)分類模型,分類模型是文章中的分類字段的外鍵,如果我們需要查詢每個(gè)分類下文章的數(shù)量,最簡(jiǎn)單的方法就是先將所有分類查到:

categories = NewsCategory.objects.all()

文章模型名稱為News

然后每個(gè)分類django都會(huì)自動(dòng)給你添加一個(gè)屬性category.news_set,這個(gè)方法就可以拿到分類對(duì)應(yīng)的文章,然后category.news_set.count()就可以拿到每個(gè)分類有多少個(gè)文章了。

但是這個(gè)方法很低級(jí)啊,如果想高級(jí)一點(diǎn),查詢性能更優(yōu)化,annotate了解一下

現(xiàn)在就可以對(duì)上面的查詢方法進(jìn)行優(yōu)化了。

categories = NewsCategory.objects.annotate(num_count=Count('news'))

annotate中其實(shí)是給categories(Queryset)添加了一個(gè)屬性,Queryset中的每個(gè)對(duì)象都會(huì)有這么一個(gè)屬性

現(xiàn)在可以這樣查詢分類下的文章數(shù)量:

category.num_count()

將代碼貼出來(lái)

原先的代碼:

 def cms_news_category(request):
 categories = NewsCategory.objects.all()
 context = {
  'categories': categories
 }
 return render(request, 'cms/category.html', context=context)
 
 模板category.html中的代碼:
 {% for category in categories %}
  <td>{{ category.name }}</td>
  <td>{{ category.news_set.count }}</td>
 {% endfor %}

當(dāng)前文章:如何使用djangoORM中values和annotate-創(chuàng)新互聯(lián)
瀏覽地址:http://www.chinadenli.net/article48/pspep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航響應(yīng)式網(wǎng)站手機(jī)網(wǎng)站建設(shè)虛擬主機(jī)App開(kāi)發(fā)定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司