django中F表達(dá)式和Q函數(shù)應(yīng)用與原理詳解
一、F表達(dá)式
1.1 原理
F表達(dá)式是對(duì)數(shù)據(jù)庫中某列值進(jìn)行操作,允許還沒有鏈接到數(shù)據(jù)的情況下對(duì)數(shù)據(jù)庫字段的值進(jìn)行操作,而不需要獲取到對(duì)象放在內(nèi)存中再對(duì)字段進(jìn)行操作,直接執(zhí)行原sql語句。
在通常情況下,我們?cè)诓僮鲾?shù)據(jù)的時(shí)候都是先從數(shù)據(jù)庫中將原數(shù)據(jù)取出放到內(nèi)存中,然后再編輯某些屬性,最后再提交。
1.2 應(yīng)用
初始數(shù)據(jù)庫數(shù)據(jù)
使用F字段直接進(jìn)行數(shù)學(xué)運(yùn)算
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á)式, 就是將模型字段的值與同一模型中的另一個(gè)字段進(jìn)行比較。
例如,查詢r(jià)ead_num大于等于230的name:
from django.db.models import F Game.objects.filter(bread__gte=F('read_num'))
F()
對(duì)象使用常量和其他 F()
對(duì)象的加法,減法,乘法,除法,模和冪運(yùn)算。
F()也可以具體到某一個(gè)字段的操作。
將閱讀數(shù)增加100
Game.objects.update(price=F("read_num") + 100)
二、Q函數(shù)
2.1 原理
- Q對(duì)象相當(dāng)于查詢時(shí)使用 or 語句 ;
- Q對(duì)象可以使用 & 和 | 進(jìn)行組合運(yùn)算, 當(dāng)一個(gè)操作符用于兩個(gè)Q對(duì)象時(shí),它就會(huì)生成一個(gè)新的Q對(duì)象;
- Q對(duì)象可以用 “~” 操作符放在前面表示否定,也可允許否定與不否定形式的組合;
- Q對(duì)象可以與關(guān)鍵字參數(shù)查詢一起使用,不過一定要把Q對(duì)象放在關(guān)鍵字參數(shù)查詢的前面;
2.2 例子
# 查詢價(jià)格大于等于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對(duì)象可以與關(guān)鍵字參數(shù)查詢一起使用,必須把普通關(guān)鍵字查詢放到Q對(duì)象查詢的后面 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用pandas讀取一個(gè)文件或某個(gè)文件夾下所有文件
這篇文章主要介紹了如何用pandas讀取一個(gè)文件或某個(gè)文件夾下所有文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python使用multiprocessing實(shí)現(xiàn)多進(jìn)程
當(dāng)我們工作中涉及到處理大量數(shù)據(jù)、并行計(jì)算或并發(fā)任務(wù)時(shí),Python的multiprocessing模塊是一個(gè)強(qiáng)大而實(shí)用的工具,在本文中,我們將探索如何使用multiprocessing模塊實(shí)現(xiàn)多進(jìn)程編程,將介紹進(jìn)程池的概念和用法,需要的朋友可以參考下2024-10-10如何基于windows實(shí)現(xiàn)python定時(shí)爬蟲
這篇文章主要介紹了如何基于windows實(shí)現(xiàn)python定時(shí)爬蟲,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05如何用python 操作MongoDB數(shù)據(jù)庫
這篇文章主要介紹了如何用python 操作MongoDB數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04盤點(diǎn)Python中讀取和提取JSON文件的4種方法
JSON(JavaScript?Object?Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,Python中提供了多種方式來讀取和處理JSON文件,本文將詳細(xì)介紹四種常見的方法,希望對(duì)大家有所幫助2024-03-03