使用之前学到过的操作实现下面的查询操作:
1. 查询平均成绩大于60分的同学的id和平均成绩;
2. 查询所有同学的id、姓名、选课的数量、总成绩;

3. 查询姓“李”的老师的个数;

4. 查询没学过“李老师”课的同学的id、姓名;
5. 查询学过课程id为1和2的所有同学的id、姓名;
6. 查询学过“黄老师”所教的“所有课”的同学的id、姓名; 7. 查询所有课程成绩小于60分的同学的id和姓名;
8. 查询没有学全所有课的同学的id、姓名;
9. 查询所有学生的姓名、平均分,并且按照平均分从高到低排序;
10. 查询各科成绩的最高和最低分,以如下形式显示:课程ID,课程名称,最高分,最低分;
11. 查询没门课程的平均成绩,按照平均成绩进行排序; 12. 统计总共有多少女生,多少男生;
13. 将“黄老师”的每一门课程都在原来的基础之上加5分;
14. 查询两门以上不及格的同学的id、姓名、以及不及格课程数;
15. 查询每门课的选课人数;

from django.shortcuts import render
from django.http import HttpResponse
from .models import Student,Teacher,Score,Course
from django.db.models import Avg,Sum,Count,Q,F,Min,Max def index(request):
#1. 查询平均成绩大于60分的同学的id和平均成绩;
students = Student.objects.annotate(score_avg = Avg("score__number")).filter(score_avg__gt=60).values('id','score_avg')
for student in students:
print(student)
return HttpResponse('') def index2(request):
#2. 查询所有同学的id、姓名、选课的数量、总成绩;
students = Student.objects.annotate(course_num = Count('score'),total = Sum('score__number')).values('id','course_num','total','name')
for student in students:
print(student)
return HttpResponse('') def index3(request):
#3.查询姓“李”的老师的个数;
count = Teacher.objects.filter(name__startswith='李').count()
print(count)
return HttpResponse('') def index4(request):
#4.查询没学过“李老师”课的同学的id、姓名;
students = Student.objects.exclude(score__course__teacher__name = '李老师').values('id','name')
for student in students:
print(student)
return HttpResponse('') def index5(request):
# 5.查询学过课程id为1和2的所有同学的id、姓名
students = Student.objects.filter(score__course__in=[1.2]).values('id','name')
for student in students:
print(student)
return HttpResponse('') def index6(request):
# 6.查询学过“黄老师”所教的所有课的同学的学号、姓名;
# 1. 首先先找到每一位学生学习的黄老师课程的数量;A
# 2. 在课程的表中找到黄老师教的课程的数量;B
# 3. 判断A是否等于B,如果相等,那么意味着这位学生学习了黄老师教的
# 所有课程,如果不想等,那么意味着这位学生没有学完黄老师教的所有课程
rows = Student.objects.annotate(nums =Count("score__course",filter=Q(score__course__teacher__name='黄老师'))).filter(nums =Course.objects.filter(teacher__name='黄老师').count()).values('id','name')
for row in rows:
print(row)
return HttpResponse('') def index7(request):
# 7. 查询所有课程成绩小于60分的同学的id和姓名;
students = Student.objects.filter(score__number__lt=60).values('id','name')
print(students)
for student in students:
print(student)
return HttpResponse('') def index8(request):
# 8. 查询没有学全所有课的同学的id、姓名;
# students = Student.objects.annotate(num=Count(F('score__course')))
students = Student.objects.annotate(num = Count(F('score__course'))).filter(num__lt=Course.objects.count()).values('id','name')
print(students)
return HttpResponse('index8') def index9(request):
# 9.查询所有学生的姓名、平均分,并且按照平均分从高到低排序;
students =Student.objects.annotate(avg = Avg('score__course')).order_by('-avg').values('name','avg')
for student in students:
print(student)
return HttpResponse('index9') def index10(request):
# 10.查询各科成绩的最高和最低分,以如下形式显示:课程ID,课程名称,最高分,最低分:
courses = Course.objects.annotate(min = Min("score__number"),max=Max("score__number")).values('id','name','min','max')
for course in courses:
print(course)
return HttpResponse("index10") def index11(request):
# 11. 查询每门课程的平均成绩,按照平均成绩进行排序;
courses = Course.objects.annotate(avg =Avg("score__number")).order_by("avg").values("id",'name','avg')
for course in courses:
print(course)
return HttpResponse('index11') def index12(request):
# 12. 统计总共有多少女生,多少男生
rows = Student.objects.aggregate(male_num=Count('gender',filter=Q(gender=1)),female_num =Count('gender',filter=Q(gender=2)))
print(rows)
return HttpResponse('index12') def index13(request):
# 13.将“黄老师”的每一门课程都在原来的基础之上加5分;
rows = Score.objects.filter(course__teacher__name='黄老师').update(number=F('number')+5)
print(rows)
return HttpResponse('index13') def index14(request):
#14 .查询两门以上不及格的同学的id、姓名、以及不及格课程数
students = Student.objects.annotate(bad_num = Count('score__number',filter=Q(score__number__lt=60))).filter(bad_num__gte=2).values('id','name','bad_num')
for student in students:
print(student)
return HttpResponse('index14') def index15(request):
#15. 查询每门课的选课人数;
courses = Course.objects.annotate(student_num = Count('score__student')).values('name','student_num')
for course in courses:
print(course)
return HttpResponse('index15')

ORM作业的更多相关文章

  1. Django的orm练习

    models(创建表): class Grade(models.Model): """年级表""" gname=models.CharFie ...

  2. python全栈开发day69-cookie、session

    一.ORM回顾 1. 内容回顾 1. Django中使用ORM连接MySQL的步骤: 1. 创建数据库 2. 告诉Django连接哪个数据库 在settings.py中设置数据库相关的链接信息 3. ...

  3. 老男孩Day13作业:ORM学员管理系统

    一.作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级      可创建指定班级的上课纪录,注意一节上 ...

  4. 第一次作业 orm环境构建(hibernate)及基本的demo

    一.数据库 1.创建数据库hibernate01-1514010311 2.创建表 customer CREATE TABLE customer( id int(11) not null auto_i ...

  5. 第六次作业 orm整合 接口

    结合以前一个项目,将普通的jdbc进行了相关整合,全部改写成了hibernate接口 项目名称:短视频分享平台 主要功能:用户模块:注册.登录.编辑资料.查看用户相关 分类模块:分类添加.查看 视频共 ...

  6. orm 语法 数据库连接、建表、增删改查、回滚、单键关联 、多键关联、三表关联

    1.数据库连接, #!usr/bin/env/python # -*- coding:utf-8 -*- # from wangteng import sqlalchemy from sqlalche ...

  7. ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...

  8. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM   本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM ...

  9. 写一个ORM框架的第一步

    新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...

随机推荐

  1. 2018年2月19日我的java学习

    2019/2/18 星期一今天学习了Java 中的面向对象思想主要学习了类 构造器等在学习修饰属性的过程中,有4点必须牢记前提是理解类的各种关系 类中有5种关系 本身 同包类 同包继承子类 不同包继承 ...

  2. SDWebImage之SDWebImageCompat

    SDWebImageCompat 是SDWebImage 的配置文件,里面利用条件编译对Apple 的各个平台进行了兼容.从源码中可以看到SDWebImage 支持当前的MAC/iOS/TV/WATC ...

  3. 一个可遇不可求的 bug 全局变量初始化顺序问题 哈哈

    这是今天下午帮同事查的一个客户端 C++ 的 bug,前人留下的谜之代码.. 具体情况是,客户端实现了有一个简单的内存池,每次申请内存的时候会把新申请到的内存信息存到一个 map 里,据说是为了检查内 ...

  4. 【Fiddler学习】Fiddler教程,比较经典全面(转)

    简介 Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddler可以也可以让你检查所有的HTTP通讯,设置断点,以及Fiddle所有 ...

  5. 1,rocketmq 的原理与安装教程

    参考文档 http://blog.csdn.net/a19881029/article/details/34446629 https://github.com/alibaba/RocketMQ htt ...

  6. Ajax 的学习

    (一)基础知识和新的概念      1,AJAX 就是浏览器提供的一套 API,可以通过 JavaScript 调用,从而实现通过代码控制请求与响应.实现 网络编程.   2,AJAX(Asynchr ...

  7. NFS客户端挂载

    关于NFS挂载#卸载: umount -fl /挂载名称#重新挂载:mount -t nfs -o rw,noac 10.8.16.11:/vx/SJOA-APP /挂载名称 #mount –v查看当 ...

  8. 死磕 java集合之ArrayDeque源码分析

    问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...

  9. (转)Linux内核参数之arp_ignore和arp_announce

    原文:https://blog.csdn.net/ccy19910925/article/details/79960599 一.arp_ignore和arp_announce介绍 arp_ignore ...

  10. 使用Jexus服务器运行Asp.Net Core2.0程序

    前段时间写了篇关于.net core跨平台部署的文章.https://my.oschina.net/lichaoqiang/blog/1861977 主要讲述了,利用Nginx+CentOS+Supe ...