1025 Day53 ORM之F查詢和Q查詢

2022-05-01 12:24:07 字數 2772 閱讀 9216

目錄1.2 q查詢

當需要欄位和字段作比較的時候用f查詢

當查詢條件是or的時候用q查詢

在之前的所有的例子中,我們構造的過濾器都只是將字段值與某個常量做比較。

如果我們要對兩個欄位的值做比較,那該怎麼做呢?

第一:django 提供 f() 來做這樣的比較。

第二:f() 的例項可以在查詢中引用字段,來比較同乙個 model 例項中兩個不同欄位的值。

from django.db.models import f

models.book.objects.filter(commnet_num__gt=f('keep_num'))

django 支援 f() 物件之間以及 f() 物件和常數之間的加減乘除和取模的操作。

models.book.objects.filter(commnet_num__lt=f('keep_num')*2)
修改操作也可以使用f函式,比如將每一本書的**提高30元

models.book.objects.all().update(price=f("price")+30)
如果要修改char欄位咋辦????

如:把所有書名後面加上(第一版)

>>> from django.db.models.functions import concat

>>> from django.db.models import value

>>> models.book.objects.update(title=concat(f("title"), value("("), value("第一版"), value(")")))

# sql分析:

models.book.objects.all().update(title) # 更新title欄位

title=concat(f("title"), value("("), value("第一版"), value(")"))

# 1.concat把字串f('title') 和 value(表示轉換成值)'第一版' 拼接起來

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

查詢作者名是max或caroline

models.book.objects.filter(q(authors__name="max")|q(authors__name="caroline"))
你可以組合&|操作符以及使用括號進行分組來編寫任意複雜的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="物語")

book.objects.filter(q(title="linux") | q(price=123))
上面的方式查詢條件只能是欄位名。

如果我們只有字串怎麼寫呢?

「title」 、 「price」

q = q()                                # 例項化乙個q物件

q.connector = "or" # 預設是且的關係

book.objects.filter(q) # 這個效果和上面的一樣,只是條件可以是字串了

1025解題 學習

這個題有個坑點 就是得到的組合不能重複 注意這個就好了 include include include include using namespace std int main sort b,b back printf d n b k 1 return 0 過得比較多 給大家提供另一種容器set 自...

每日總結10 25

先貼上今日的任務計畫表以及相應的實施完成情況 暫且撇棄仍然未把任務全部完成一說,較之之前,能夠完成的任務有所增長,這是乙個小小的進步!總結反省 1.今天下午和今天晚上還是沒能管理好自己的時間,主要原因是睏意很重,不能很好地集中精神 2.對於自己已經構建好的思維導圖,仍然沒能安排時間進行複習與鞏固 3...

1025 除數博弈

愛麗絲和鮑勃一起玩遊戲,他們輪流行動。愛麗絲先手開局。最初,黑板上有乙個數字n。在每個玩家的回合,玩家需要執行以下操作 如果玩家無法執行這些操作,就會輸掉遊戲。只有在愛麗絲在遊戲中取得勝利時才返回true,否則返回false。假設兩個玩家都以最佳狀態參與遊戲。示例 1 輸入 2 輸出 true 解釋...