使用之前学到过的操作实现下面的查询操作:
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. 查询每门课的选课人数;

  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from .models import Student,Teacher,Score,Course
  4. from django.db.models import Avg,Sum,Count,Q,F,Min,Max
  5.  
  6. def index(request):
  7. #1. 查询平均成绩大于60分的同学的id和平均成绩;
  8. students = Student.objects.annotate(score_avg = Avg("score__number")).filter(score_avg__gt=60).values('id','score_avg')
  9. for student in students:
  10. print(student)
  11. return HttpResponse('')
  12.  
  13. def index2(request):
  14. #2. 查询所有同学的id、姓名、选课的数量、总成绩;
  15. students = Student.objects.annotate(course_num = Count('score'),total = Sum('score__number')).values('id','course_num','total','name')
  16. for student in students:
  17. print(student)
  18. return HttpResponse('')
  19.  
  20. def index3(request):
  21. #3.查询姓“李”的老师的个数;
  22. count = Teacher.objects.filter(name__startswith='李').count()
  23. print(count)
  24. return HttpResponse('')
  25.  
  26. def index4(request):
  27. #4.查询没学过“李老师”课的同学的id、姓名;
  28. students = Student.objects.exclude(score__course__teacher__name = '李老师').values('id','name')
  29. for student in students:
  30. print(student)
  31. return HttpResponse('')
  32.  
  33. def index5(request):
  34. # 5.查询学过课程id为1和2的所有同学的id、姓名
  35. students = Student.objects.filter(score__course__in=[1.2]).values('id','name')
  36. for student in students:
  37. print(student)
  38. return HttpResponse('')
  39.  
  40. def index6(request):
  41. # 6.查询学过“黄老师”所教的所有课的同学的学号、姓名;
  42. # 1. 首先先找到每一位学生学习的黄老师课程的数量;A
  43. # 2. 在课程的表中找到黄老师教的课程的数量;B
  44. # 3. 判断A是否等于B,如果相等,那么意味着这位学生学习了黄老师教的
  45. # 所有课程,如果不想等,那么意味着这位学生没有学完黄老师教的所有课程
  46. 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')
  47. for row in rows:
  48. print(row)
  49. return HttpResponse('')
  50.  
  51. def index7(request):
  52. # 7. 查询所有课程成绩小于60分的同学的id和姓名;
  53. students = Student.objects.filter(score__number__lt=60).values('id','name')
  54. print(students)
  55. for student in students:
  56. print(student)
  57. return HttpResponse('')
  58.  
  59. def index8(request):
  60. # 8. 查询没有学全所有课的同学的id、姓名;
  61. # students = Student.objects.annotate(num=Count(F('score__course')))
  62. students = Student.objects.annotate(num = Count(F('score__course'))).filter(num__lt=Course.objects.count()).values('id','name')
  63. print(students)
  64. return HttpResponse('index8')
  65.  
  66. def index9(request):
  67. # 9.查询所有学生的姓名、平均分,并且按照平均分从高到低排序;
  68. students =Student.objects.annotate(avg = Avg('score__course')).order_by('-avg').values('name','avg')
  69. for student in students:
  70. print(student)
  71. return HttpResponse('index9')
  72.  
  73. def index10(request):
  74. # 10.查询各科成绩的最高和最低分,以如下形式显示:课程ID,课程名称,最高分,最低分:
  75. courses = Course.objects.annotate(min = Min("score__number"),max=Max("score__number")).values('id','name','min','max')
  76. for course in courses:
  77. print(course)
  78. return HttpResponse("index10")
  79.  
  80. def index11(request):
  81. # 11. 查询每门课程的平均成绩,按照平均成绩进行排序;
  82. courses = Course.objects.annotate(avg =Avg("score__number")).order_by("avg").values("id",'name','avg')
  83. for course in courses:
  84. print(course)
  85. return HttpResponse('index11')
  86.  
  87. def index12(request):
  88. # 12. 统计总共有多少女生,多少男生
  89. rows = Student.objects.aggregate(male_num=Count('gender',filter=Q(gender=1)),female_num =Count('gender',filter=Q(gender=2)))
  90. print(rows)
  91. return HttpResponse('index12')
  92.  
  93. def index13(request):
  94. # 13.将“黄老师”的每一门课程都在原来的基础之上加5分;
  95. rows = Score.objects.filter(course__teacher__name='黄老师').update(number=F('number')+5)
  96. print(rows)
  97. return HttpResponse('index13')
  98.  
  99. def index14(request):
  100. #14 .查询两门以上不及格的同学的id、姓名、以及不及格课程数
  101. 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')
  102. for student in students:
  103. print(student)
  104. return HttpResponse('index14')
  105.  
  106. def index15(request):
  107. #15. 查询每门课的选课人数;
  108. courses = Course.objects.annotate(student_num = Count('score__student')).values('name','student_num')
  109. for course in courses:
  110. print(course)
  111. 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. java_io

    JAVA IO流(一)参考文章:http://ifeve.com/java-io-network/,并发编程网原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java ...

  2. JVM活学活用——调优工具

    概述 工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗费性能的分析(dump文件分析)一般也不会在生产直接分析,往往dump下来的文件达1G左右,人工分析效率较低,因此利用工具来分析jvm相 ...

  3. 简单的基于矩阵分解的推荐算法-PMF, NMF

    介绍: 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱.其 ...

  4. Android 追加写入文件的三种方法

    一.使用FileOutputStream 使用FileOutputStream,在构造FileOutputStream时,把第二个参数设为true public static void method1 ...

  5. https网页加载http资源导致的页面报错及解决方案

    https是当下的网站的主流趋势,甚至像苹果这样的大公司,则完全要求用户必须使用https地址. 然而对于以前http链接来说,我们往往就存在一个兼容性问题,因为你不可能一下就全部切换过去,应该在很长 ...

  6. ElasticSearch权威指南学习(分布式文档存储)

    路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...

  7. PHP-1安装配置

    php-fpm启动 /usr/local/php/sbin/php-fpm start

  8. java调用高德地图api实现通过ip定位访问者的城市

    所需东西:高德地图的key 注意:这个key是 web服务的key  和js的key不是一个key(若没有则自行创建,创建教程在文末) 高德地图的api文档:https://lbs.amap.com/ ...

  9. Spark Core

    Spark Core    DAG概念        有向无环图        Spark会根据用户提交的计算逻辑中的RDD的转换(变换方法)和动作(action方法)来生成RDD之间的依赖关系,同时 ...

  10. vuex的module的简单实用方法

    当我们的项目越来越大的时候,我们就开始使用vuex来管理我们的项目的状态.但是如果vuex的状态多了呢,这个时候module就登场了.看了一下官方的文档,很详细,但是没有demo让初学者很头疼.那我就 ...