1. 程式人生 > 其它 >Django之ORM中Q與F查詢

Django之ORM中Q與F查詢

技術標籤:DjangodjangoormF查詢Q查詢

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)