av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

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

django 利用Q對(duì)象與F對(duì)象進(jìn)行查詢的實(shí)現(xiàn)

瀏覽:151日期:2024-10-05 18:09:05

Q對(duì)象:

優(yōu)勢(shì):可以實(shí)現(xiàn) 與|或|非 組合查詢。

給幾個(gè)小例子就一目了然了:

Book.objects.filter(id__gt=2,bread__gt=20) #and關(guān)系Book.objects.filter(Q(bread__gt=20) & Q(id__gt=2)) #and關(guān)系Book.objects.filter(Q(bread__gt=20) | Q(id__gt=2)) #or關(guān)系Book.objects.filter.(~Q(id=3)) # ~表示not,查詢編號(hào)不等于3的圖書

F對(duì)象:

優(yōu)勢(shì):能利用當(dāng)前obj的值進(jìn)行比較。

Book.objects.filter(bread__gt=F(’bcomment’)*2) #閱讀量大于評(píng)論量的圖書*2,可以在F對(duì)象上使用算術(shù)運(yùn)算

以前你可能經(jīng)常只進(jìn)行Book.objects.filter(bread__gt=20)這樣的查詢 ,有了F對(duì)象你就可以和當(dāng)前obj的屬性值進(jìn)行比較了。

實(shí)際開發(fā)中遇到的問題:

如果事情都按照示例那樣進(jìn)行就好了,然而開發(fā)中總會(huì)遇到一些坑。

比如下面這個(gè)是我實(shí)際開發(fā)中遇到的問題:

user = request.userInterviewer.object.filter(Q(interviewer_1=user) | Q(interviewer_2=user) | Q(interviewer_3=user))

目的是想查一面或者二面或者三面的面試官包含user的面試。

其中interviewer_1、interviewer_2、interviewer_3是Interviewer表中的三個(gè)多對(duì)多字段的外鍵。

結(jié)果可能讓意想不到,結(jié)果是一個(gè)包含多個(gè)重復(fù)值的查詢集,置于為什么會(huì)重復(fù),我并沒用做深入調(diào)查,但是這在django ORM多表查詢中會(huì)經(jīng)常遇到,這就是網(wǎng)上說的一般的情況下,QuerySet 中不會(huì)出來重復(fù)的,重復(fù)是很罕見的,但是當(dāng)跨越多張表進(jìn)行檢索后,結(jié)果并到一起,可能會(huì)出來重復(fù)的值。

那么要怎么解決這個(gè)問題呢?很簡(jiǎn)單,后面加個(gè).distinct()作用就是去重。

user = request.userInterviewer.object.filter(Q(interviewer_1=user) | Q(interviewer_2=user) | Q(interviewer_3=user)).distinct()

補(bǔ)充知識(shí):Django中models利用ORM對(duì)Mysql進(jìn)行查表的語(yǔ)句

一: all() 返回模型類對(duì)應(yīng)表格中所有的數(shù)據(jù)。

二:get():返回表格中滿足條件的一條數(shù)據(jù),如果查到多條數(shù)據(jù),則拋異常:MultipleObjectsReturned,查詢不到數(shù)據(jù),則拋異常:DoesNotExist。

三:filter():參數(shù)寫查詢條件,返回滿足條件 QuerySet 集合數(shù)據(jù)。

條件格式:

“模型類屬性名” __條件名=值(此處模型類屬性名為model里面的屬性名,不是數(shù)據(jù)庫(kù)里面表的字段名)

1)判斷是否存在

BookInfo.object.filter(id__exact=1)此處的__exact 可以省略

2)模糊查詢

>查詢書名包含傳的圖書

BookInfo.objects.filter(btitle__contains=’傳’)

>查詢書名不為空的圖書

BookInfo.objects.filter(btitle__isnull=False)

>查詢圖書id在1,3,5的圖書

BookInfo.objects.filter(id__in=[1,3,5])

>比較查詢 gt lt(less than) gte(equal) lte

BookInfo.objects.filter(id__gte=3)

>日期查詢

BookInfo.objects.filter(bpub_date__year = 1980)

BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))

四、exclude()返回不滿足條件的數(shù)據(jù)

BookInfo.objects.exclude(id=3)

五 F對(duì)象

作用:用于類屬性之間的比較條件。

用法:

1:導(dǎo)入 from django.db.models import F

2 :舉例 BookInfo.objects.filter(bread_gt = F(’bcomment’) (查詢閱讀量大于評(píng)論量的圖書)

3: 舉例 BookInfo.objects.filter(bread__gt=F(‘bcomment’)*2) (查詢閱讀量等于2倍評(píng)論量的圖書)

六 Q對(duì)象

作用:用于查詢時(shí)的邏輯條件。可以對(duì) Q 對(duì)象進(jìn)行&|~操作。

用法:

1:導(dǎo)入 from django.db.models import Q

2: 舉例:

BookInfo.objects.filter(id__gt=3,bread__gt=30) 和 Book.objects.filter(Q(id__gt=3)&Q(bread__gt=3))

3:舉例:

BookInfo.objects.filter(Q(id__gt=3) | Q(bread__gt=30))

七 order_by 返回QuerySet

作用:對(duì)查詢結(jié)果進(jìn)行排序。

1:舉例 BookInfo.object.all().order_by('id')[正序]

2:舉例 BookInfo.object.all().order_by('-id')[倒序]

3:舉例:BookInfo.objects.filter(id__gt=3).order_by(’-bread’)

以上這篇django 利用Q對(duì)象與F對(duì)象進(jìn)行查詢的實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 国产一区二区视频免费在线观看 | 午夜看看 | 久久99久久99 | 国产精品久久片 | 国产电影一区二区 | 中文字幕精品视频 | 成人欧美一区二区三区黑人孕妇 | 欧美日韩综合 | 日韩综合在线 | 国产精品久久久久久久久久软件 | 日韩精品在线观看一区二区三区 | 欧美一级视频 | 黄色国产视频 | 91视视频在线观看入口直接观看 | 久久久久国产一区二区三区四区 | 欧美日韩不卡合集视频 | 日本天堂一区 | 欧美黄色一级毛片 | 日本黄色大片免费 | 精品国产一区二区三区久久久四川 | 国产一区免费 | 国产精品久久久久久久久久免费看 | 91精品国产一区 | 欧美日韩国产传媒 | 99re6热在线精品视频播放 | 国产精品久久久久久久免费观看 | 天堂精品 | 精品国产一区二区三区性色 | 久久午夜国产精品www忘忧草 | 亚洲视频免费在线观看 | 国外成人在线视频 | 亚洲成人三区 | 99久久婷婷国产综合精品 | 在线看片国产 | 亚洲乱码国产乱码精品精的特点 | 欧美日韩在线免费观看 | 欧美日日 | 日韩精品在线免费观看 | 亚洲精品一区二区三区中文字幕 | 狠狠亚洲 | 91精品国产综合久久久亚洲 |