django中F表達(dá)式和Q函數(shù)應(yīng)用與原理詳解
一、F表達(dá)式
1.1 原理
F表達(dá)式是對數(shù)據(jù)庫中某列值進(jìn)行操作,允許還沒有鏈接到數(shù)據(jù)的情況下對數(shù)據(jù)庫字段的值進(jìn)行操作,而不需要獲取到對象放在內(nèi)存中再對字段進(jìn)行操作,直接執(zhí)行原sql語句。
在通常情況下,我們在操作數(shù)據(jù)的時候都是先從數(shù)據(jù)庫中將原數(shù)據(jù)取出放到內(nèi)存中,然后再編輯某些屬性,最后再提交。
1.2 應(yīng)用
初始數(shù)據(jù)庫數(shù)據(jù)
使用F字段直接進(jìn)行數(shù)學(xué)運算
from django.db models import F res = models.Bbook.objects.all().update(read_num=F('read_num')+1)
操作之后,數(shù)據(jù)庫中的數(shù)據(jù)都加5
Django中提供F 表達(dá)式, 就是將模型字段的值與同一模型中的另一個字段進(jìn)行比較。
例如,查詢read_num大于等于230的name:
from django.db.models import F Game.objects.filter(bread__gte=F('read_num'))
F()
對象使用常量和其他 F()
對象的加法,減法,乘法,除法,模和冪運算。
F()也可以具體到某一個字段的操作。
將閱讀數(shù)增加100
Game.objects.update(price=F("read_num") + 100)
二、Q函數(shù)
2.1 原理
- Q對象相當(dāng)于查詢時使用 or 語句 ;
- Q對象可以使用 & 和 | 進(jìn)行組合運算, 當(dāng)一個操作符用于兩個Q對象時,它就會生成一個新的Q對象;
- Q對象可以用 “~” 操作符放在前面表示否定,也可允許否定與不否定形式的組合;
- Q對象可以與關(guān)鍵字參數(shù)查詢一起使用,不過一定要把Q對象放在關(guān)鍵字參數(shù)查詢的前面;
2.2 例子
# 查詢價格大于等于70并且標(biāo)題是“J”開頭的書 Book.objects.filter(Q(price__gte=70)&Q(title__startswith="J")) # 查詢標(biāo)題是“J”開頭并且id不是3的書 Book.objects.filter(Q(title__startswith="J") & ~Q(id=3)) # Q對象可以與關(guān)鍵字參數(shù)查詢一起使用,必須把普通關(guān)鍵字查詢放到Q對象查詢的后面 print(Book.objects.filter(Q(price=70)|Q(title="Python"), publication_date="2017-09-26"))
總結(jié)
到此這篇關(guān)于django中F表達(dá)式和Q函數(shù)應(yīng)用與原理的文章就介紹到這了,更多相關(guān)django中F表達(dá)式和Q函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用multiprocessing實現(xiàn)多進(jìn)程
當(dāng)我們工作中涉及到處理大量數(shù)據(jù)、并行計算或并發(fā)任務(wù)時,Python的multiprocessing模塊是一個強(qiáng)大而實用的工具,在本文中,我們將探索如何使用multiprocessing模塊實現(xiàn)多進(jìn)程編程,將介紹進(jìn)程池的概念和用法,需要的朋友可以參考下2024-10-10如何用python 操作MongoDB數(shù)據(jù)庫
這篇文章主要介紹了如何用python 操作MongoDB數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04