Django筆記十五之in查詢及date日期相關過濾操作

来源:https://www.cnblogs.com/hunterxiong/archive/2023/04/03/17284700.html
-Advertisement-
Play Games

java.util.regex 包主要包括以下三個類: Pattern 類: pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern 對象。該方法接受一個正則表達式作為它的第一 ...


這一篇介紹關於範圍,日期的篩選

  1. in
  2. range
  3. date
  4. year
  5. week
  6. weekday
  7. quarter
  8. hour

1、in

in 對應於 MySQL 中的 in 操作,可以接受數組、元組等類型數據作為參數:

Blog.objects.filter(id__in=[1,2,3])

對應的 SQL 是:

select * from blog_blog where id in (1,2,3);

字元串也可以作為參數,但是轉義後的 SQL 的意思不太一樣:


Blog.objects.filter(name__in="abc")

對應的 SQL 為:

select * from blog_blog where name in ('a', 'b', 'c');

in 操作也可以用於子查詢動態的獲取列表信息:

inner_qs = Blog.objects.filter(name__contains='hunter')
Entry.objects.filter(blog__in=inner_qs)

註意,以上的QuerySet 只在第二步的時候會去查詢資料庫,其SQL類似於:

select * from blog_entry where blog_id in (select id from blog_blog where name like binary '%hunter%')

在第一條語句中,沒有指定欄位,所以是預設搜索 id 的值

如果需要搜索其他欄位,比如 name,則需要使用 values() 函數或者 values_list 來指定欄位:

inner_qs = Blog.objects.filter(name__contains='hunter').values('name')
Entry.objects.filter(blog__name__in=inner_qs)

對應的 SQL 為:

select * from blog_entry where  FROM `blog_entry` INNER JOIN `blog_blog` ON (blog_entry.id = blog_blog.id)
where blog_blog.name in (select name from blog_blog where name like binary '%hunter%')

2、range

range 是在什麼範圍之內,對應於 SQL 中的 between and

可以作用在 整型和日期類型欄位:


Blog.objects.filter(id__range=[1, 10])

Entry.objects.filter(pud_date__range=['2020-01-01', '2023-01-01'])

3、date

獲取符合條件的日期,作用在 datetimefield 上,因為 datefield 本身就是日期,所以不需要 __date 開修飾。

假設一個 model 為 TestModel:

class TestModel(models.Model):
	created_time = models.DateTimeField()

這個時候我們想要篩選某個日期,則可以如下使用:

TestModel.objects.filter(created_time__date='2022-01-01')

也可以和上一篇筆記中的 大小於結合使用:

TestModel.objects.filter(created_time__date__gte='2022-01-01')

4、year

篩選年份符合的數據,可作用於 datefield 和 datetimefield 上:

Entry.objects.filter(pub_date__year=2022)

對應的 SQL 為:

select * from blog_entry where pub_date between '2022-01-01' and '2022-12-31';

使用大小於操作:

Entry.objects.filter(pub_date__year__gte=2022)

對應的 SQL 是:

select * from blog_entry where pub_date >= '2022-01-01'

同樣的,與 year 相對應的 month 和 day 也可以這樣使用。

5、week

一年有 52 個周,如果想獲取周數為第幾個的話,可以如此操作:

Entry.objects.filter(pub_date__week=2)

對應的 SQL 為:

select * from blog_entry where WEEK(pub_date, 3) = 3;

6、weekday

weekday 對應的是 周幾,周日是1,周一是2,到周六是 7

比如想找出 Entry 里所有周一的數據:

Entry.objects.filter(pub_date__weekday=2)

或者是想找出 2022年所有周一的數據:

Entry.objects.filter(pub_date__year=2022).filter(pub_date__weekday=2)

7、quarter

quarter 是查詢季度數據,一年一共四個季度,1月1日到3月31日,4月1日到6月30日,7月1日到9月30日,10月1日到12月31日

比如查看所有第二季度的數據:

Entry.objects.filter(pub_date__quarter=2)

8、hour

hour 是小時,與上面的用法同:

TestModel.objects.filter(created_time__hour=9)

以上就是本篇筆記全部內容,接下來將介紹 Django 的 model 的聚合 aggregate 的用法。

本文首發於本人微信公眾號:Hunter後端

原文鏈接:Django筆記十五之in查詢及date日期相關過濾操作

如果想獲取更多相關文章,可掃碼關註閱讀:
image


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:京東科技 孫凱 一、前言 對前端開發者來說,Vite 應該不算陌生了,它是一款基於 nobundle 和 bundleless 思想誕生的前端開發與構建工具,官網對它的概括和期待只有一句話:“下一代的前端工具鏈”。 Vite 最早的版本由尤雨溪發佈於3年前,經歷了3年多的發展,Vite 也已逐 ...
  • 我們只會在 Observer 類 和 defineReactive 函數中實例化 dep。在 getter 方法中依賴收集,在 setter 方法中派發更新通知 ...
  • 簡介 組合模式(Composite Pattern),又叫部分整體模式,是一種結構型設計模式。用於把一組類似的對象當作一個單一的對象來看。組合模式依據樹形結構來組合對象,用不同組件來構建某個部分或整體對象。 如果你需要實現樹狀對象結構,可以使用組合模式。如果你希望客戶端代碼以相同方式處理簡單和複雜元 ...
  • 經典設計模式源碼詳解,用不同語言來實現,包括Java/JS/Python/TypeScript/Go等。結合實際場景,充分註釋說明,每一行代碼都經過檢驗,確保可靠。 設計模式是一個程式員進階高級的必然選擇,不懂設計模式,就像寫文章不懂得層次,蓋房子沒有結構。只有充分懂得設計之道,才能真正設計出良好的... ...
  • 如果你需要一個自動化的工具幫助你或者你的團隊發現代碼中的缺陷,在提升代碼質量同時減少人工Code Review的成本,那這篇文章非常的適合你。 ...
  • super關鍵字的一些註意事項 子類在執行構造方法時,如果顯式使用super()顯式調用父類構造方法,則該調用必須放代碼塊在第一行 super必須出現在子類的方法或者構造方法中 使用this()顯示調用構造方法,則該調用必須放在代碼塊第一行 由於第一條和第三條限制,super和this不能同時調用構 ...
  • P2 List介面和常用方法 一、List介面基本介紹 List介面是 Collection 介面的子介面 List集合類中元素有序(即添加順序和取出順序一致)、且可重覆 List集合類中的每一個元素都有其對應的順序索引,即支持索引。 List容器中都對應一個整數型的序號記載其在容器中的位置,可以根 ...
  • 給大家分享一個Github倉庫,上面有大彬整理的300多本經典的電腦書籍PDF,包括C語言、C++、Java、Python、前端、資料庫、操作系統、電腦網路、數據結構和演算法、機器學習、編程人生等,可以star一下,下次找書直接在上面搜索,倉庫持續更新中~ Github地址 C語言教程——翁凱老師 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...