溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django框架models使用group by詳解

發(fā)布時(shí)間:2020-10-14 06:29:06 來(lái)源:腳本之家 閱讀:242 作者:tianweitao 欄目:開(kāi)發(fā)技術(shù)

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語(yǔ)句:

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ǔ)充知識(shí):django模型orm進(jìn)行g(shù)roup by

場(chǎng)景:三個(gè)模型分別為教師,學(xué)生,課程。一個(gè)教師可主講多門(mén)課程,但一門(mén)課程只能由一個(gè)教師主講,即教師和課程是一對(duì)多的關(guān)系。一個(gè)學(xué)生可選多門(mén)課程,一門(mén)課程可被多個(gè)學(xué)生選,即學(xué)生和教師為多對(duì)多的關(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

多對(duì)多也一樣

這個(gè)例子不太典型,比如快遞和其狀態(tài)兩張表是一對(duì)多關(guān)系,查最新的狀態(tài)就可以使用這種方法(也可以在有新的狀態(tài)時(shí)在快遞表中每次更新最新的狀態(tài))

以上這篇Django框架models使用group by詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI