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

您的位置:首頁技術文章
文章詳情頁

django 利用Q對象與F對象進行查詢的實現

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

Q對象:

優勢:可以實現 與|或|非 組合查詢。

給幾個小例子就一目了然了:

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

F對象:

優勢:能利用當前obj的值進行比較。

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

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

實際開發中遇到的問題:

如果事情都按照示例那樣進行就好了,然而開發中總會遇到一些坑。

比如下面這個是我實際開發中遇到的問題:

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表中的三個多對多字段的外鍵。

結果可能讓意想不到,結果是一個包含多個重復值的查詢集,置于為什么會重復,我并沒用做深入調查,但是這在django ORM多表查詢中會經常遇到,這就是網上說的一般的情況下,QuerySet 中不會出來重復的,重復是很罕見的,但是當跨越多張表進行檢索后,結果并到一起,可能會出來重復的值。

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

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

補充知識:Django中models利用ORM對Mysql進行查表的語句

一: all() 返回模型類對應表格中所有的數據。

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

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

條件格式:

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

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()返回不滿足條件的數據

BookInfo.objects.exclude(id=3)

五 F對象

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

用法:

1:導入 from django.db.models import F

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

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

六 Q對象

作用:用于查詢時的邏輯條件??梢詫?Q 對象進行&|~操作。

用法:

1:導入 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

作用:對查詢結果進行排序。

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對象與F對象進行查詢的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 点击进入不卡毛片免费观看 | 日韩一级一片 | 五月色一区二区亚洲小说 | 韩国v欧美v亚洲v日本v | 久草三级 | 亚洲美女福利视频在线 | 久草在线观看资源 | 国产高清在线精品一区a | 亚洲精品国产综合99久久一区 | 在线观看免费为成年视频 | 久久成人免费视频 | 亚洲综合精品成人 | 亚洲午夜精品一级在线播放放 | 99综合在线 | 特级淫片日本高清视频 | 成人国产视频在线观看 | 未满14周岁啪啪网站 | 亚洲第一男人天堂 | 亚洲成人在线视频 | 亚洲一区二区在线 | 韩国一级毛片在线观看 | 成年网站在线在免费播放 | 亚洲国产精品综合久久20 | 久久受www免费人成看片 | 成人午夜视频一区二区国语 | 99热成人精品热久久66 | 成人国产精品高清在线观看 | 自拍视频在线观看视频精品 | 欧美一级视频在线观看 | 午夜影院a级片 | 国产亚洲精彩视频 | 色黄啪啪18周岁以下禁止观看 | 日本伊人精品一区二区三区 | 1769视频在线观看国产 | 国产成人tv在线观看 | 99久久免费精品国产免费高清 | 色黄网站aaaaaa级毛片 | 婷婷亚洲久悠悠色在线播放 | 在线一区国产 | 99精品视频免费观看 | 午夜影院黄色片 |