Python - Django - ORM 分组查询补充

Posted sch01ar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - Django - ORM 分组查询补充相关的知识,希望对你有一定的参考价值。

单表查询:

models.py:

from django.db import models


class Employee(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField()
    salary = models.IntegerField()
    province = models.CharField(max_length=32)
    dept = models.CharField(max_length=16)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "employee"

employee 表中数据:

技术图片

orm.py:

import os

if __name__ == ‘__main__‘:
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app04 import models

    from django.db.models import Avg

    # 计算每个部门的平均工资
    ret = models.Employee.objects.values("dept").annotate(avg=Avg("salary")).values("dept", "avg")
    print(ret)

运行结果:

技术图片

 

连表查询:

model.py:

from django.db import models


class Employee2(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField()
    salary = models.IntegerField()
    province = models.CharField(max_length=32)
    dept = models.ForeignKey(to="Dept")

    def __str__(self):
        return self.name

    class Meta:
        db_table = "employee2"


class Dept(models.Model):
    name = models.CharField(max_length=16, unique=True)

    def __str__(self):
        return self.name

    class Meta:
        db_table = "dept2"

dept2 表:

技术图片

employee2 表:

技术图片

 

orm.py:

import os

if __name__ == ‘__main__‘:
    # 加载 Django 项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
    # 导入 Django,并启动 Django 项目
    import django
    django.setup()

    from app04 import models

    from django.db.models import Avg

    # 连表查询计算每个部门的平均工资
    ret = models.Employee2.objects.values("dept_id").annotate(avg=Avg("salary")).values("dept__name","avg")  # 一个双下划线表示跨一张表查询
    print(ret)

运行结果:

技术图片

 

以上是关于Python - Django - ORM 分组查询补充的主要内容,如果未能解决你的问题,请参考以下文章

Python - Django - ORM 分组查询补充

python 之 Django框架(orm单表查询orm多表查询聚合查询分组查询F查询 Q查询事务Django ORM执行原生SQL)

Python学习---django之ORM的增删改查180125

Python学习第130天(Django中ORM一对多的增删改查)

ORM增删改查(django)

Django之ORM的增删改查