django queryset 去重

在Django中,使用QuerySet時,如果你想要對查詢結果進行去重(即去除重復的記錄),你可以使用幾種不同的方法。這里列出了一些常見的方法:

  1. 使用distinct()
    distinct()方法用于返回QuerySet中不重復的唯一對象。這對于基于數據庫的查詢特別有用,因為它通常在數據庫層面執行去重操作,從而減少需要傳輸的數據量。

假設我們有一個模型 Person,我們想要基于名字去重

people = Person.objects.values(‘name’).distinct()
2. 使用annotate()和Count
如果你想要在去重的同時計算每個唯一記錄的數量,可以使用annotate()和Count。

from django.db.models import Count

假設我們想要計算每個名字的出現次數

people = Person.objects.values(‘name’).annotate(total=Count(‘name’)).order_by()
3. 使用set()(在Python層面)
如果你想要在Django ORM查詢之后在Python層面進行去重,可以先將QuerySet轉換為列表或集合,然后使用Python的set()函數。

先將QuerySet轉換為列表,然后轉換為集合去重,最后轉回列表

people = list(set(Person.objects.all()))
4. 使用order_by()后跟distinct()
有時候,僅僅使用distinct()可能不會按預期工作,特別是當涉及到關聯字段時。在這種情況下,可以先對一個或多個字段進行排序,然后再使用distinct()。

假設我們根據名字和年齡去重

people = Person.objects.order_by(‘name’, ‘age’).distinct()
5. 使用values_list()配合set()(在Python層面)
如果你只需要基于某些字段的值進行去重,可以先使用values_list()獲取這些字段的值,然后轉換為集合。

假設我們只關心人的名字,基于名字去重

names = set(Person.objects.values_list(‘name’, flat=True))
6. 使用filter()結合distinct()(特定條件下的去重)
如果你想要在滿足特定條件的情況下進行去重,可以先應用filter()然后使用distinct()。

假設我們只對年齡大于18的人的名字進行去重

people = Person.objects.filter(age__gt=18).values(‘name’).distinct()
選擇哪種方法取決于你的具體需求,比如你是在數據庫層面進行去重還是需要在Python層面處理數據。通常,盡可能在數據庫層面進行操作可以更高效地利用數據庫的索引和優化。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89029.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WIFI MTU含義 ,協商修改的過程案例分析

WIFI MTU含義 ,協商修改的過程案例分析 文章目錄 **WIFI MTU含義 ,協商修改的過程案例分析****一、WIFI MTU的含義****二、MTU協商修改的過程案例分析****1. TCP/IP協議中的MTU協商****2. 藍牙(BLE)中的MTU協商****3. 網絡設備配置中的MTU調整****三、協商修改的注意事項**…

記一次Android Studio編譯報錯:Execution failed for task ‘:app:compileDebugAidl‘

問題背景: android studio導入AIDL文件的時候編譯提示: Execution failed for task :app:compileDebugAidl. > A failure occurred while executing com.android.build.gradle.tasks.AidlCompile$AidlCompileRunnable > com.android.ide.common.process.ProcessEx…

selenium跳轉到新頁面時如何進行定位

在 Selenium 中,當你跳轉到新頁面(例如通過點擊鏈接、提交表單或 JavaScript 重定向)時,通常會遇到頁面加載或窗口切換的問題。為了在新頁面上繼續進行頁面定位操作,你需要確保以下幾點:? 1. 等待頁面加載…

QT——QComboBox組合框控件

QComboBox概述QComboBox是Qt框架中提供的組合框控件,它結合了按鈕和下拉列表的功能,允許用戶從預定義的選項列表中選擇一個或多個項目。基本特性特性描述顯示方式顯示當前選中項,點擊后展開下拉列表編輯能力可設置為可編輯或不可編輯項目類型…

CentOS 安裝jenkins筆記

1. 安裝 Java。目前一般jdk要求11以上,否則會報錯2. 手動添加 Jenkins 倉庫先創建一個專門的Jenkins文件夾:mkdir jenkins然后 執行 sudo curl -fsSL https://pkg.jenkins.io/redhat/jenkins.io.key -o /etc/pki/rpm-gpg/jenkins.io.key 然后&#xff0…

C#枚舉:從基礎到高級的全方位解析

C#枚舉:從基礎到高級的全方位解析 在 C# 編程中,枚舉(Enum)是一種特殊的值類型,用于定義命名的常量集合,它為代碼提供了更強的類型安全、可讀性和可維護性。從簡單的狀態標識到復雜的位運算組合&#xff0c…

[spring6: Resource ResourceLoader ResourceEditor]-加載資源

Resource Resource 接口為處理和訪問不同類型資源(如文件、URL、輸入流等)提供了統一的 API,支持資源的存在性檢查、讀取、轉換等操作。 public interface Resource extends InputStreamSource {boolean exists();default boolean isReadable…

Spring Boot - Spring Boot 集成 MyBatis 分頁實現 PageHelper

一、PageHelper 概述 PageHelper 是一個優秀的 MyBatis 分頁插件&#xff0c;可以方便地在 Spring Boot 項目中使用 MyBatis 結合 PageHelper 實現分頁功能二、PageHelper 引入 1、依賴引入 pom.xml <properties>...<postgresql.verison>42.5.6</postgresql.ver…

jenkins自動化部署前端vue+docker項目

文章目錄一、準備工作二、編寫dockerfile文件三、新建jenkins任務一、準備工作 默認你的服務器centos已經搭建完成&#xff0c;同時已經安裝了jenkins和docker。 接下來去下載開源項目ruoyi并上傳到自己的gitee中。 二、編寫dockerfile文件 打開項目工程&#xff0c;在rouy…

opencv中contours的使用

一 Contour FindingContours使用 STL-style vector<> 表示&#xff0c;如 vector<cv::Point>, vector<cv::Point2f>。opencv中&#xff0c;使用函數 cv::findContours() 尋找contours&#xff0c; 具體函數定義如下&#xff1a;void cv::findContours(cv::In…

網絡安全初級

1、docker并配置代理 &#xff08;1&#xff09;在Ubuntu中安裝docker apt-get install docker.io docker-compose &#xff08;2&#xff09;安裝完成后&#xff0c;進入/etc/systemd/system/docker.service.d/http-proxy.conf配置文件下進行代理的配置&#xff0c;配置如圖…

JetBrains IDE 性能優化指南:idea.vmoptions 核心參數解析與配置建議

文章目錄深入解析 JetBrains IDE 的 VM 選項&#xff1a;idea.vmoptions 參數詳解一、內存與垃圾回收配置二、診斷與錯誤處理三、運行時優化參數四、模塊系統與反射控制五、特殊參數說明六、配置建議指南深入解析 JetBrains IDE 的 VM 選項&#xff1a;idea.vmoptions 參數詳解…

Datawhale AI夏令營 《基于帶貨視頻評論的用戶洞察挑戰賽》Part .1.

1. 賽題 參賽者需要構建端到端的評論分析系統&#xff0c;完成三大核心任務&#xff1a; 商品識別 輸入&#xff1a;視頻描述文本(video_desc)和標簽(video_tags)輸出&#xff1a;精準識別推廣商品名稱(Xfaiyx Smart Translator/Recorder) 多維情感分析 維度&#xff1a;情感傾…

【博文匯項目全維度測試報告:功能與自動化雙軌驗證】

&#x1f308;個人主頁: Aileen_0v0 &#x1f525;熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?&#x1f4ab;個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄 項目背景:項目背景與意義&#xff1a;項目概述已實現的主要功能包括&#xff1a;當前系統存在的不足…

Java陷阱之assert關鍵字詳解

Assert.isTrue()方法用于斷言條件是否為真&#xff0c;如果條件不滿足&#xff08;即為false&#xff09;&#xff0c;則會拋出IllegalArgumentException&#xff0c;并附帶預設的錯誤信息。在示例中&#xff0c;當1.23不小于2.23時&#xff0c;方法拋出了異常&#xff0c;顯示…

mysql 散記:innodb引擎和memory引擎對比 sql語句少用函數 事務與長事務

文章目錄innodb引擎和memory引擎對比對比sql 語句&#xff1a;盡可能不使用函數條件隱式轉換隱式類型轉換隱式字符編碼轉換補充問題事務與長事務ACIDread viewMVCC 一致性視圖當前讀view 虛擬表長事務的影響與排查影響排查方法預防innodb引擎和memory引擎對比 innodb引擎是索引…

APK安裝器(安卓端)一鍵解除VX限制!輕松安裝各種手機應用

VX為了防止惡意軟件通過平臺傳播&#xff0c;保障用戶設備安全&#xff0c;會把通過VX發送的 APK 文件自動改成 “apk.1” 格式&#xff0c;這樣就能減少惡意軟件傳播的風險。我平時推薦安卓軟件的時候&#xff0c;有朋友反饋說&#xff0c;文件發到VX里就變成 “apk.1” 了&am…

Debian:從GNOME切換到Xfce

最近為20年前的T43重新安裝了Debian系統&#xff0c;但使用的gnome桌面太卡了。于是換成輕量級的Xfce系統。 1.安裝Xfce sudo apt update sudo apt install xfce4 xfce4-goodies命令中xfce4 是Xfce桌面環境的核心組件&#xff0c;xfce4-goodies 是一些額外的工具和插件&#xf…

徐州服務器租用:BGP線路的特點有哪些?

BGP的中文全稱為邊界網關協議&#xff0c;是指一種運行在傳輸控制協議上的自治系統路由協議&#xff0c;主要的功能就是可以實時控制路由的傳播&#xff0c;同時能夠幫助用戶選擇更合適的路由線路&#xff0c;保證網絡能夠穩定的運行&#xff0c;不會輕易出現網絡卡頓或故障的狀…

Java使用OSHI獲取服務器信息

OSHI可以獲取系統信息&#xff08;CPU、內存、磁盤、網絡等&#xff09;&#xff0c;純Java實現&#xff08;通過JNA訪問本地API&#xff0c;無需安裝本地庫&#xff09;&#xff0c;跨平臺支持。引入依賴<dependency><groupId>com.github.oshi</groupId><…