99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

如何使用djangoORM中values和annotate-創新互聯

這篇文章主要為大家展示了如何使用django ORM中values和annotate,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

創新互聯公司-專業網站定制、快速模板網站建設、高性價比廬山網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式廬山網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋廬山地區。費用合理售后完善,十載實體公司更值得信賴。

任務需求:項目中有個問題表,存儲所有的問題,以_id為編號,由于_id未做唯一校驗,所以早期數據有多個問題使用同一編號的情況。

需求就是找出編號有重復的數據,只保留第一個

開始之前

使用了values和annotate兩個函數

簡單的來說values可以理解成展示models指定列的值

annotate起到了group by的作用,

所以我做的事就是對指定字段按個數進行統計,然后留下重復編號的數據,進行清洗

看看數據庫數據

如何使用django ORM中values和annotate

查看每條數據的_id的值

如何使用django ORM中values和annotate

對_id數據條數進行統計

如何使用django ORM中values和annotate

轉換數據格式為list

如何使用django ORM中values和annotate

Emmm。。。我只需要重復數據,所以把_id唯一的數據剔除

寫個簡單的遍歷

如何使用django ORM中values和annotate

然后只需要找到這些數據,對每個_id只留下第一條數據

導出sql,做個備份,開始刪除數據

最終處理:

如何使用django ORM中values和annotate

刪除過程:

如何使用django ORM中values和annotate

再回到網站看看數據清洗后的效果

如何使用django ORM中values和annotate

補充知識:django中annotate的一點使用方法

annotate 使用方法:

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

categories = NewsCategory.objects.all()

文章模型名稱為News

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

但是這個方法很低級啊,如果想高級一點,查詢性能更優化,annotate了解一下

現在就可以對上面的查詢方法進行優化了。

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

annotate中其實是給categories(Queryset)添加了一個屬性,Queryset中的每個對象都會有這么一個屬性

現在可以這樣查詢分類下的文章數量:

category.num_count()

將代碼貼出來

原先的代碼:

 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 %}

當前文章:如何使用djangoORM中values和annotate-創新互聯
瀏覽地址:http://www.yijiale78.com/article48/pspep.html

成都網站建設公司_創新互聯,為您提供面包屑導航響應式網站手機網站建設虛擬主機App開發定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司