成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

django queryset相加和篩選教程

瀏覽:199日期:2024-10-05 14:45:11

1、集合相加

a = {1,2,3}b = {3,4,5}print(type(a))print(a|b)

2、queryset 符合條件的篩序

projects = Project_models.objects.filter(user=request.user).order_by(’id’)projects = projects.filter(bad_numbers__gt=0).order_by(’bad_numbers’)

補充知識:django中聚合aggregate和annotate GROUP BY的使用方法

接觸django已經很長時間了,但是使用QuerySet查詢集的方式一直比較低端,只會使用filter/Q函數/exclude等方式來查詢,數據量比較小的時候還可以,但是如果數據量很大,而且查詢比較復雜,那么如果還是使用多個filter進行查詢效率就會很低。就趁著清明放假的時間,跑來公司干點私活。輸出成這篇文檔,一是加深印象,提高熟練度;二是分享出來,造福大家~

提高查詢數據庫效率的方案有兩種:

第一種,是使用原生的SQL語句來進行查詢,這樣的優點在于能夠完全按照開發者的意圖來執行,效率會很高,但是缺點也很明顯:

1.開發者需要非常熟悉SQL語句,加大開發者的工作量,同時,夾雜著SQL的項目也不利于以后程序的維護,增大程序的耦合度。

2.若查詢條件是動態變化的,則會使開發變得更加困難。

django為了解決這一難題,提供了aggregate(聚合函數)和annotate(在aggregate的基礎上進行GROUP BY操作)。

下面,就來介紹第二種方法。

一. aggregate的使用方法

今天在同事的指點下,仔細看了django中annotate的使用方法,會根據查詢條件來動態生成SQL語句,提高組合查詢的效率。

理解aggregate的關鍵在于理解SQL中的聚合函數:以下摘自百度百科:SQL基本函數,聚合函數對一組值執行計算,并返回單個值。除了 COUNT 以外,聚合函數都會忽略空值。 常見的聚合函數有AVG / COUNT / MAX / MIN /SUM 等。

aggregate就是在django中實現聚合函數的。先來看aggregate的使用場景:在項目中有時候你想要從數據庫中取出一個匯總的集合。我們使用django官方的例子:

from django.db import modelsclass Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField()class Publisher(models.Model): name = models.CharField(max_length=300) num_awards = models.IntegerField()class Book(models.Model): name = models.CharField(max_length=300) pages = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) rating = models.FloatField() authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) pubdate = models.DateField()class Store(models.Model): name = models.CharField(max_length=300) books = models.ManyToManyField(Book) registered_users = models.PositiveIntegerField()

如果我們使用aggregate來進行計數:

>>> from django.db.models import Count>>> pubs = Publisher.objects.aggregate(num_books=Count(’book’))>>> pubs{’num_books’: 27}

而且aggregate不單單可以求和,還可以求平均Avg,最大最小等等。

>>> from django.db.models import Avg>>> Book.objects.all().aggregate(Avg(’price’)){’price__avg’: 34.35}# Cost per page 輸出的名字同樣可以指定,比如price_per_page>>> from django.db.models import F, FloatField, Sum>>> Book.objects.all().aggregate(... price_per_page=Sum(F(’price’)/F(’pages’), output_field=FloatField())){’price_per_page’: 0.4470664529184653}

通過上面的介紹,我們可以知道,aggregate的邏輯比較簡單,應用場景比較窄,如果你想要對數據進行分組(GROUP BY)后再聚合的操作,則需要使用annotate來實現。

二. annotate的使用方法

首先,假設有這么一個models:

# python:2.7.9# django:1.7.8class MessageTab(models.Model): msg_sn = models.CharField(max_lenth=20, verbose_name=u’編號’) msg_name = models.CharField(max_length=50, verbose_name=u’消息名稱’) message_time = models.DateTimeField(verbose_name=u’消息出現時間’) msg_status = models.CharField(max_length=50, default=’未處理’, verbose_name=u’消息狀態’) class Meta: db_table = ’message_tab’

如果在開發過程中,有這么一個需求:查詢各個消息狀態的數量。那么我們經常會使用filter(…).count(…)來進行查詢?,F在我們可以使用:

msgS = MessageTab.objects.values_list(’msg_status’).annotate(Count(’id’))

其中,id為數據庫自動生成的自增字段。values_list的用法自行Google,或者print出來看一看。

此時,數據庫實際執行的代碼,可以通過:

print msgS.query

打印出來??梢钥吹剑?/p>

SELECT `message_tab`.`msg_status`, COUNT(`message_tab`.`id`) AS `id__count` FROM `message_tab` GROUP BY `message_tab`.`msg_status` ORDER BY NULL

很直觀明了。通過msg_status來進行group by。如果想自定義id__count,比如指定為msg_num,則可以使用:annotate(msg_num=Count(‘id’))

當存在多個查詢條件時,比如查詢最近7天內,message_name屬于某個分組內的消息,則可以使用Q函數:

date_end = now().date() + timedelta(days=1)date_start = date_end - timedelta(days=7)messageTimeRange = (date_start, date_end)GroupList = getGroupIdLis(request.user) # 返回當前用戶能查詢的group的一個列表。。僅做參考用qQueryList = [Q(message_time__range=messageTimeRange), Q(message_name__in=GroupList)] # 可以有多個Q函數查詢條件msgS = MessageTab.objects.filter(reduce(operator.and_, qQueryList)).values_list(’msg_status’).annotate(msg_num=Count(’id’))

再次調用print msgS.query可看到SQL語句:

SELECT `message_tab`.`msg_status`, COUNT(`message_tab`.`id`) AS `msg_num` FROM `message_tab` WHERE (`message_tab`.`message_time` BETWEEN 2017-03-27 00:00:00 AND 2017-04-03 00:00:00 AND `message_tab`.`message_name` IN (1785785, 78757, 285889, 2727333, 7272957, 786767)) GROUP BY `message_tab`.`msg_status` ORDER BY NULL

是不是很完美??!

以上這篇django queryset相加和篩選教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一本色道综合亚洲| 成人午夜激情影院| 成人国产在线观看| 欧美日本一区二区三区四区| 午夜天堂影视香蕉久久| 国产欧美日韩一区二区三区在线| 国产精品伦理在线| 欧美日韩第一区| 欧美国产欧美综合| 91蝌蚪porny九色| 国产日本欧洲亚洲| 欧美另类视频| 国产精品乱人伦| 国内自拍视频一区二区三区| 国产精品成人在线观看| 亚洲高清二区| 亚洲一区国产视频| 久久精品一区| 美女性感视频久久| 欧美日韩小视频| 国产精选一区二区三区| 日韩欧美激情在线| 99视频热这里只有精品免费| 久久久久久久久久久久电影 | 欧美精品偷拍| 成人欧美一区二区三区1314| 亚洲国产专区校园欧美| 亚洲一区电影777| 在线观看区一区二| 麻豆国产欧美一区二区三区| 欧美理论在线播放| 成人夜色视频网站在线观看| 欧美tickling挠脚心丨vk| 亚洲一区二区视频| 成人三级伦理片| 免费成人在线观看| 色婷婷久久久亚洲一区二区三区 | 亚洲精品自在在线观看| 国产成人精品一区二| 亚洲精品激情| 永久久久久久| 日韩精品成人一区二区三区| 国产大片一区二区| 欧美优质美女网站| 国产精品亚洲视频| 粉嫩aⅴ一区二区三区四区五区| 日韩一区二区免费视频| 99久久伊人久久99| 综合激情成人伊人| 老司机久久99久久精品播放免费| 美日韩一区二区三区| 欧美一区二区播放| 午夜久久tv| 亚洲成人激情综合网| 欧美高清一级片在线| aaa亚洲精品一二三区| 亚洲色图色小说| 色婷婷狠狠综合| 成人听书哪个软件好| 欧美日本国产一区| 欧美精品一卡| 亚洲高清免费视频| 欧美久久久久久蜜桃| 欧美一区二视频在线免费观看| 亚洲精品大片www| 欧美性高清videossexo| 国产91色综合久久免费分享| 欧美激情综合在线| 欧美性猛片xxxx免费看久爱| gogo大胆日本视频一区| 亚洲欧美激情视频在线观看一区二区三区| 久久国产高清| www.亚洲人| 国产欧美日韩综合精品一区二区| 久久精品一区二区三区中文字幕| 国产精品18久久久久久久久久久久| 国产亚洲精品超碰| 久久激情网站| 91小视频在线| 人人超碰91尤物精品国产| 国产亚洲精品7777| 久久亚洲图片| 91在线国内视频| 偷拍自拍另类欧美| 久久婷婷色综合| 日韩三级av在线播放| 99成人在线| 成人做爰69片免费看网站| 一区二区三区免费网站| 91麻豆精品国产无毒不卡在线观看 | 国产精品久线观看视频| 欧美色老头old∨ideo| 尤物精品在线| 国产成人精品aa毛片| 亚洲国产另类av| 精品卡一卡二卡三卡四在线| 美女久久网站| 欧美日韩三级| 国产一区二区视频在线播放| 一区二区免费视频| 久久久亚洲精品石原莉奈| 在线观看不卡一区| 亚洲区欧美区| av一区二区三区四区| 欧美aaa在线| 亚洲三级在线免费观看| 日韩免费电影一区| 色婷婷综合久久久中文一区二区 | 一区二区三区精品国产| 99国产精品久久久久| 久久超碰97人人做人人爱| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲精品成人精品456| 精品国产3级a| 欧美色图天堂网| 日韩亚洲视频| 欧美在线1区| 国产精品亚洲成人| 三级不卡在线观看| 亚洲色欲色欲www在线观看| 精品国产亚洲在线| 欧美精品欧美精品系列| 麻豆成人精品| 亚洲最黄网站| 欧美日韩综合网| 成人一级视频在线观看| 免费成人你懂的| 亚洲高清免费观看| 亚洲精品中文在线观看| 国产精品丝袜一区| 精品国产乱码久久久久久1区2区 | 亚洲免费伊人电影| 国产偷国产偷精品高清尤物| 69av一区二区三区| 欧亚一区二区三区| 久久婷婷丁香| 亚洲欧美日韩视频二区| 99re66热这里只有精品4 | 欧美日韩国产精品成人| 色综合激情五月| 国产精品久久久一区二区| 黄色精品网站| 欧美人成在线| 91年精品国产| 91麻豆福利精品推荐| 成人国产精品免费观看| 成人性视频免费网站| 丁香婷婷综合激情五月色| 国产九色sp调教91| 国产在线视频一区二区三区| 久久99九九99精品| 免费成人av在线| 免费国产亚洲视频| 日韩成人精品在线观看| 午夜视频一区二区| 亚洲国产视频直播| 亚洲国产日日夜夜| 洋洋av久久久久久久一区| 亚洲视频1区2区| 亚洲乱码一区二区三区在线观看| 亚洲视频一区二区在线| 亚洲欧洲成人精品av97| 国产精品高潮久久久久无| 国产精品久久久久久一区二区三区| 国产亚洲成aⅴ人片在线观看 | 男女男精品视频网| 美女视频一区在线观看| 欧美aaaaaa午夜精品| 麻豆精品在线看| 国产在线精品不卡| 国产东北露脸精品视频| 国产成人免费视| 福利91精品一区二区三区| 成人福利电影精品一区二区在线观看| 成人高清伦理免费影院在线观看| av电影一区二区| 欧美日韩综合另类| 在线欧美日韩| 国产欧美一级| 亚洲欧美日韩精品综合在线观看 | 欧美人与性动xxxx| 欧美一区二区三区男人的天堂| 欧美一级片在线| 日韩精品一区二区三区在线播放| 精品国产伦一区二区三区观看方式 | 中文字幕不卡的av| 亚洲欧洲成人自拍| 亚洲综合久久久久| 日本欧美在线看| 国内精品免费**视频| 国产69精品久久99不卡| 91在线国产观看| 国产一区观看| 国产日韩精品久久| 色系网站成人免费| 欧美一区二区女人| 久久午夜色播影院免费高清| 欧美极品xxx| 亚洲综合一区二区三区| 亚洲成人综合在线|