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单表查询orm多表查询聚合查询分组查询F查询 Q查询事务Django ORM执行原生SQL)
Python学习---django之ORM的增删改查180125