django ORM之values和annotate使用詳解
任務(wù)需求:項目中有個問題表,存儲所有的問題,以_id為編號,由于_id未做唯一校驗,所以早期數(shù)據(jù)有多個問題使用同一編號的情況。
需求就是找出編號有重復(fù)的數(shù)據(jù),只保留第一個
開始之前
使用了values和annotate兩個函數(shù)
簡單的來說values可以理解成展示models指定列的值
annotate起到了group by的作用,
所以我做的事就是對指定字段按個數(shù)進行統(tǒng)計,然后留下重復(fù)編號的數(shù)據(jù),進行清洗
看看數(shù)據(jù)庫數(shù)據(jù)
查看每條數(shù)據(jù)的_id的值
對_id數(shù)據(jù)條數(shù)進行統(tǒng)計
轉(zhuǎn)換數(shù)據(jù)格式為list
Emmm。。。我只需要重復(fù)數(shù)據(jù),所以把_id唯一的數(shù)據(jù)剔除
寫個簡單的遍歷
然后只需要找到這些數(shù)據(jù),對每個_id只留下第一條數(shù)據(jù)
導(dǎo)出sql,做個備份,開始刪除數(shù)據(jù)
最終處理:
刪除過程:
再回到網(wǎng)站看看數(shù)據(jù)清洗后的效果
補充知識:django中annotate的一點使用方法
annotate 使用方法:
有時候我們需要連接兩個表做一些查詢,比如博客中有兩個模型,一個文章模型,一個分類模型,分類模型是文章中的分類字段的外鍵,如果我們需要查詢每個分類下文章的數(shù)量,最簡單的方法就是先將所有分類查到:
categories = NewsCategory.objects.all()
文章模型名稱為News
然后每個分類django都會自動給你添加一個屬性category.news_set,這個方法就可以拿到分類對應(yīng)的文章,然后category.news_set.count()就可以拿到每個分類有多少個文章了。
但是這個方法很低級啊,如果想高級一點,查詢性能更優(yōu)化,annotate了解一下
現(xiàn)在就可以對上面的查詢方法進行優(yōu)化了。
categories = NewsCategory.objects.annotate(num_count=Count(’news’))
annotate中其實是給categories(Queryset)添加了一個屬性,Queryset中的每個對象都會有這么一個屬性
現(xiàn)在可以這樣查詢分類下的文章數(shù)量:
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 %}
使用annotate后的代碼:
def cms_news_category(request): categories = NewsCategory.objects.annotate(num_count=Count(’news’)) context = { ’categories’: categories } return render(request, ’cms/category.html’, context=context) 模板category.html中的代碼: {% for category in categories %} <td>{{ category.name }}</td> <td>{{ category.num_count }}</td> {% endfor %}
以上這篇django ORM之values和annotate使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. php測試程序運行速度和頁面執(zhí)行速度的代碼2. ASP中常用的22個FSO文件操作函數(shù)整理3. 三個不常見的 HTML5 實用新特性簡介4. Warning: require(): open_basedir restriction in effect,目錄配置open_basedir報錯問題分析5. ASP調(diào)用WebService轉(zhuǎn)化成JSON數(shù)據(jù),附j(luò)son.min.asp6. SharePoint Server 2019新特性介紹7. React+umi+typeScript創(chuàng)建項目的過程8. 無線標(biāo)記語言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁9. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執(zhí)行過程解析10. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究
