Django框架models使用group by詳解
Django框架models使用group by詳解:
首先,看下列代碼:
UserData.objects.filter(hubid=sensorid,time__range=(time2,time1)).values('hour').annotate(sum_out=Sum('outdoor'), sum_in=Sum('indoor'), sum_eat=Sum('kitchen'), sum_wash=Sum('toilet')).order_by('hour')
上述代碼相當(dāng)于sql語句:
select Sum('outdoor') as sum_out,Sum('indoor') as sum_in,Sum('kitchen') as sum_eat,Sum('toilet') as sum_wash,hour
where hubid='sensorid' and (time between time1 and time2)
group by hour
order by hour asc
另外,在Django中order_by(‘hour')表示按生序排列,若要按降序排列,則使用order_by(‘-hour')
補(bǔ)充知識:django模型orm進(jìn)行g(shù)roup by
場景:三個(gè)模型分別為教師,學(xué)生,課程。一個(gè)教師可主講多門課程,但一門課程只能由一個(gè)教師主講,即教師和課程是一對多的關(guān)系。一個(gè)學(xué)生可選多門課程,一門課程可被多個(gè)學(xué)生選,即學(xué)生和教師為多對多的關(guān)系。
class Teacher(models.Model): name = models.CharField(max_length=20, verbose_name='教師姓名') def __unicode__(self): return self.name class Student(models.Model): name = models.CharField(max_length=20, verbose_name='學(xué)生姓名') def __unicode__(self): return self.name class Course(models.Model): name = models.CharField(max_length=20, verbose_name='課程名') teacher = models.ForeignKey(Teacher, verbose_name='主講人') student = models.ManyToManyField(Student, verbose_name='選課學(xué)生') def __unicode__(self): return self.name
選取某教師主講的pk最小的課:
Teacher.objects.annotate(Min('course__pk')).get(pk=2).course__pk__min
多對多也一樣
這個(gè)例子不太典型,比如快遞和其狀態(tài)兩張表是一對多關(guān)系,查最新的狀態(tài)就可以使用這種方法(也可以在有新的狀態(tài)時(shí)在快遞表中每次更新最新的狀態(tài))
以上這篇Django框架models使用group by詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pandas實(shí)現(xiàn)to_sql將DataFrame保存到數(shù)據(jù)庫中
這篇文章主要介紹了pandas實(shí)現(xiàn)to_sql將DataFrame保存到數(shù)據(jù)庫中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)同一局域網(wǎng)下傳輸圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03python數(shù)據(jù)庫PooledDB連接池初始化使用示例
這篇文章主要為大家介紹了python數(shù)據(jù)庫PooledDB連接池初始化使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Python?異步之如何啟動(dòng)獲取事件循環(huán)
這篇文章主要為大家介紹了Python?異步之如何啟動(dòng)獲取事件循環(huán)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03python測試驅(qū)動(dòng)開發(fā)實(shí)例
這篇文章主要介紹了python測試驅(qū)動(dòng)開發(fā)實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10python腳本實(shí)現(xiàn)分析dns日志并對受訪域名排行
這篇文章主要介紹了python腳本實(shí)現(xiàn)分析dns日志并對受訪域名排行,本文是在Windows服務(wù)器環(huán)境中實(shí)現(xiàn),需要的朋友可以參考下2014-09-09