单表查询:
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)
运行结果: