目錄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 解釋...