Django之ORM中Q與F查詢
阿新 • • 發佈:2021-02-01
Django之ORM中Q與F查詢
以這張User表為示例
F查詢:能夠直接獲取到表中指定欄位對應的資料
from django.db.models import F
# 查詢user表中weight大於height的資料
models.User.objects.filter(F(weight__gt=F("height")))
# 將user表中所有的age增加5
models.User.objects.update(age=F("age")+5)
# 將所有資料name欄位末尾加個“好帥”
# 在操作字元型別的資料的時候 , F不能夠直接做到字串的拼接 需要藉助Concat模組和Value模組
from django.db.models.functions import Concat
from django.db.models import Value
models.User.objects.update(name=Concat(F("name"), Value("好帥")))
Q查詢:能夠改變多個查詢條件之間的關係 與或非
from django.db.models import Q
# 基礎用法
# age小於18 且 weight大於160
models.User.objects.filter(Q(age__lt=18), Q(weight__gt=160)) # 預設是and
# age小於18 或 weight大於160
models.User.objects.filter(Q(age__lt=18) | Q(weight__gt=160)) # | 是或
# age不小於18 且 weight不大於160
models.User.objects.filter(~Q(age__lt=18), ~Q(weight__gt=160)) # ~ 是非
# 高階用法
q = Q() # Q的底層是一個物件
# 修改預設連結關係為 or
q.connector = "or"
# 一般查詢資料的時候,條件左邊都是變數名的形式,這裡可以通過Q物件做到左邊為字串(動態指定查詢條件)
q.children.append(("name", "小明")) # 第一個引數為變數名,第二個引數為值
q.children.append(("age", 18)) # 也可以新增多個條件
models.User.objects.filter(q)