国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django中Q查詢及Q()對(duì)象 F查詢及F()對(duì)象用法

瀏覽:122日期:2024-09-27 13:01:18

Django Q/F

#1 環(huán)境

Python3.7.3

Django==2.0.6

#2 開始

#2.1 django F()表達(dá)式

每次獲取times當(dāng)前的值,再+1,這樣需要將times值取出,存到內(nèi)存中

obj = models.Test.objects.get(name='cox')obj.times = obj.times + 1obj.save()

雖然 obj.times = F(“times”) + 1

看起來像常規(guī)的Python為實(shí)例屬性賦值,但實(shí)際上它是一個(gè)描述數(shù)據(jù)庫(kù)上操作的SQL結(jié)構(gòu)

當(dāng)Django遇到要給F()實(shí)例,它會(huì)覆蓋標(biāo)準(zhǔn)的Python運(yùn)算符來創(chuàng)建一個(gè)封裝的SQL表達(dá)式;在這個(gè)例子中,指示數(shù)據(jù)庫(kù)增加由 obj.times 表示的數(shù)據(jù)庫(kù)字段。

無論 obj.times 的值是或曾是什么,Python永遠(yuǎn)不需要知道?完全由數(shù)據(jù)庫(kù)來處理。Python通過Django的F()類做的所有事情僅是參考某個(gè)字段創(chuàng)建SQL語(yǔ)法來描述操作。

obj = models.Test.objects.get(name='cox')obj.times = F('times') + 1obj.save()

因此,F(xiàn)()可以通過以下方式提供性能優(yōu)勢(shì)

直接在數(shù)據(jù)庫(kù)中操作而不是python

減少一些操作所需的數(shù)據(jù)庫(kù)查詢次數(shù)

#2.2 F()操作在 obj.save() 后會(huì)持續(xù)存在

如果times的值是1,那么經(jīng)過n次save()之后,times的值是2

obj = models.Test.objects.get(name='cox')obj.times = obj.times + 1obj.save()obj.save()obj.save()

如果times的值是1,那么經(jīng)過n次save()之后,times的值是1+n,而不是2,就是因?yàn)镕()操作在 obj.save() 后會(huì)持續(xù)存在

obj = models.Test.objects.get(name='cox')obj.times = F('times') + 1obj.save()obj.save()obj.save()

#2.3 F()再過濾(filter)中的使用

獲取表中收入(input_price)大于支出(output_price)的數(shù)據(jù)

models.Test.objects.filter(input_price__gt=F('output_price'))

Django支持F()對(duì)象使用加、減、乘、除、取模和冪運(yùn)算等算術(shù)操作,兩個(gè)操作數(shù)可以是常數(shù)或F()對(duì)象

models.Test.objects.filter(input_price__gt=F('output_price')*2)

models.Test.objects.filter(input_price__gt=F('output_price')+F('output_price'))

你還可以在F()對(duì)象中使用雙下劃線標(biāo)記來跨越關(guān)聯(lián)關(guān)系。 帶有雙下劃線的F()對(duì)象將引入任何需要的join 操作以訪問關(guān)聯(lián)的對(duì)象

models.Test.objects.filter(authors__name=F(’blog__name’))

對(duì)于date 和date/time 字段,你可以給它們加上或減去一個(gè)timedelta對(duì)象

from datetime import timedelta

models.Test.objects.filter(mod_date__gt=F(’pub_date’) + timedelta(days=3))

#2.4 Django Q()表達(dá)式

當(dāng)我們?cè)诓樵兊臈l件中需要組合條件時(shí)(例如兩個(gè)條件“且”或者“或”)時(shí)。我們可以使用Q()查詢對(duì)象

from django.db.models import Qmodels.Author.objects.filter(Q(name='cox') | Q(name='Tom')) # 獲取在Author表中,name等于cox和name等于cox的所有數(shù)據(jù)models.Author.objects.filter(Q(name='cox') & Q(age=12))# 獲取在Author表中,name等于cox并且age等于12的所有數(shù)據(jù)

#2.5 Q()傳入條件查詢

q1 = Q()q1.connector = ’OR’q1.children.append((’name’, 'cox'))q1.children.append((’name’, 'Tom'))q1.children.append((’name’, 'Jeck')) models.Author.objects.filter(q1) # 在Author表中,name等于cox/Tom/Jeck的所有數(shù)據(jù)

con = Q()q1 = Q()q1.connector = ’OR’q1.children.append((’name’, 'cox'))q1.children.append((’name’, 'Tom'))q1.children.append((’name’, 'Jeck'))q2 = Q()q2.connector = ’OR’q2.children.append((’age’, 12))con.add(q1, ’AND’)con.add(q2, ’AND’)models.Author.objects.filter(con) # 在Author表中,name等于cox/Tom/Jeck的 并且 滿足age等于12 的所有數(shù)據(jù)

#2.6 Q()非

在Q()語(yǔ)句中,~代表非

models.Author.objects.filter(~Q(name='cox')) # 獲取在Author表中,name不等于cox的所有數(shù)據(jù)

補(bǔ)充知識(shí):Django 中 Models 的 F()和 Q()函數(shù)

1、F() ---- 專門取對(duì)象中某列值的操作

F對(duì)象允許Django在未實(shí)際鏈接數(shù)據(jù)的情況下具有對(duì)數(shù)據(jù)庫(kù)字段的值的引用。

通常情況下我們?cè)诟聰?shù)據(jù)時(shí)需要先從數(shù)據(jù)庫(kù)里將原數(shù)據(jù)取出后方在內(nèi)存里,然后編輯某些屬性,最后提交。

all = BookInfo.objects.filter(auth='小明')for b in all: price = b.price b.price = price + 10 b.save # 使用F對(duì)象來計(jì)算BookInfo.objects.filter(auth='小明').update(price=F('price')+10)

2、Q() ---- 對(duì)對(duì)象的復(fù)雜查詢

Q對(duì)象是Django對(duì)model查詢中所使用的關(guān)鍵字參數(shù)進(jìn)行封裝后的一個(gè)對(duì)象。

Q對(duì)象可以通過 &(與)、 |(或)、 ~(非)運(yùn)算來組合生成不同的Q對(duì)象,便于在查詢操作中靈活地運(yùn)用。

from django.db.models import Q# 并且條件:與條件查詢models.User.objects.filter(條件1,條件2,條件n..)models.User.objects.filter(Q(username=’老王’) & Q(userpass=’admin’))# 或者條件:或條件models.User.objects.fliter(Q(username=’老王’) | Q(username=’老李’))# 取反條件models.User.objects.filter(~Q(username=’老王’))models.User.objects.exclude(username=’老王’)

以上這篇Django中Q查詢及Q()對(duì)象 F查詢及F()對(duì)象用法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 国产成人精品区在线观看 | 欧美一级大片免费看 | 日本免费高清视频二区 | 日韩黄色片在线观看 | 亚洲国产精品aaa一区 | 不卡无毒免费毛片视频观看 | 一级毛片免费不卡在线视频 | 毛片视频网站 | 特黄视频 | 91男女视频 | 日韩精品久久一区二区三区 | 97国产在线观看 | 成人国产在线不卡视频 | 欧美一级毛片大片免费播放 | 中国japanesevideo乱 | 三上悠亚免费一区二区在线 | 美女黄网站人色视频免费国产 | 在线免费视频国产 | 香蕉视频黄在线观看 | 成人国产一区二区 | 久久香蕉精品视频 | 久青草视频在线 | 日日操干| 国产精品久久久久久久久 | 精品国产免费一区二区三区五区 | 亚洲骚片 | 91亚洲国产成人久久精品网址 | 日韩色综合 | 一区二区三区久久 | 美女三级网站 | 精品欧美一区二区三区在线观看 | 国产午夜亚洲精品理论片不卡 | 亚洲视频在线一区 | 久久国产精品女 | 国产亚洲精品yxsp | 成年人色网站 | 中文字幕一区二区视频 | 久久一本精品久久精品66 | 亚洲韩国欧美一区二区三区 | 一级毛片视频在线 | 国产成人综合洲欧美在线 |