django ORM操作之Q查詢兩種用法

2022-05-01 14:45:10 字數 797 閱讀 5147

第一種用法:

filter() 等方法中的關鍵字引數查詢都是一起進行「and」 的。 如果你需要執行更複雜的查詢(例如or語句),你可以使用q物件。

示例1:

查詢作者名是小仙女或小魔女的

models.book.objects.filter(q(authors__name="小仙女")|q(authors__name="小魔女"))

你可以組合& 和|  操作符以及使用括號進行分組來編寫任意複雜的q 物件。同時,q 物件可以使用~ 操作符取反,這允許組合正常的查詢和取反(not) 查詢。

示例:查詢作者名字是小仙女並且不是2023年出版的書的書名。

>>> models.book.objects.filter(q(author__name="小仙女") & ~q(publish_date__year=2018)).values_list("title")

查詢函式可以混合使用q 物件和關鍵字引數。所有提供給查詢函式的引數(關鍵字引數或q 物件)都將"and」在一起。但是,如果出現q 物件,它必須位於所有關鍵字引數的前面。

例如:查詢出版年份是2017或2018,書名中帶物語的所有書。

>>> models.book.objects.filter(q(publish_date__year=2018) | q(publish_date__year=2017), title__icontains="物語")

第二種用法:

傳q物件,構造搜尋條件

首先還是需要匯入模組:

from django.db.models import q

傳入條件進行查詢:

django orm 查詢語句

model.objects.all 獲取所有物件的queryset model.objects.filter 獲取滿足條件的物件的queryset model.objects.exclude 獲取不滿足條件的物件的queryset model.objects.get 獲取單個符合條件的物件的quer...

Django ORM分組查詢

關鍵字 annotate models後面 什麼就是按什麼分組 eg models.book.objects.annotate 這裡就是按照書籍表每本書來分組 示例 統計每本書的作者數量 res models.book.objects.annotate author num count author...

Django ORM基礎操作

jquery dom d1 自動翻譯 document.getelementbyid d1 databases import pymysql 告訴django用pymysql來代替預設的mysqldb pymysql.install as mysqldb mysqldb不支援中py3 class 類...