orm练习题
表关系图
models.py
- from django.db import models
- # Create your models here.
- class Teacher(models.Model):
- tid=models.AutoField(primary_key=True)
- tname=models.CharField(max_length=32)
- classes=models.ManyToManyField("Klass")
- def __str__(self):
- return self.tname
- class Grade(models.Model):
- gid=models.AutoField(primary_key=True)
- gname=models.CharField(max_length=32)
- def __str__(self):
- return self.gname
- class Klass(models.Model):
- kid=models.AutoField(primary_key=True)
- kname=models.CharField(max_length=32)
- grade=models.ForeignKey("Grade",on_delete=models.CASCADE)
- def __str__(self):
- return self.kname
- class Student(models.Model):
- sid=models.AutoField(primary_key=True)
- sname=models.CharField(max_length=32)
- gender=models.IntegerField(choices=((0,"男"),(1,"女")))
- cls=models.ForeignKey("Klass",on_delete=models.CASCADE)
- def __str__(self):
- return self.sname
- class Course(models.Model):
- cid=models.AutoField(primary_key=True)
- cname=models.CharField(max_length=32)
- teacher=models.ForeignKey("Teacher",on_delete=models.CASCADE)
- def __str__(self):
- return self.cname
- class Score(models.Model):
- sid=models.AutoField(primary_key=True)
- student=models.ForeignKey("Student",on_delete=models.CASCADE)
- course=models.ForeignKey("Course",on_delete=models.CASCADE)
- score=models.IntegerField()
- def __str__(self):
- return str(self.student)+str(self.course)+str(self.score)
- # class Meta:
- # unique_together = (("student","course"),)
测试题目:
- 1、 自行创建测试数据;
- 2、 查询学生总人数;
- 3、 查询“生物”课程和“物理”课程成绩都及格的学生id和姓名;
- 4、 查询每个年级的班级数,取出班级数最多的前三个年级;
- 5、 查询平均成绩最高的学生的id和姓名以及平均成绩;
- 6、 查询每个年级的学生人数;
- 7、 查询每位学生的学号,姓名,平均成绩;
- 8、 查询学生编号为“2”的学生的姓名、该学生成绩最高的课程名及分数;
- 9、 查询姓“李”的老师的个数和所带班级数;
- 10、查询班级数小于5的年级id和年级名;
- 11、查询教过课程超过2门的老师的id和姓名;
- 12、查询学过编号“1”课程和编号“2”课程的同学的学号、姓名;
- 13、查询所带班级数最多的老师id和姓名;
- 14、查询有课程成绩小于60分的同学的学号、姓名;
- 15、查询男生、女生的人数,按倒序排列;
- 16、查询各个课程及相应的选修人数;
- 17、查询同时选修了物理课和生物课的学生id和姓名;
- 18、检索“3”课程分数小于60,按分数降序排列的同学学号;
- 19、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
- 20、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
答案:
- # # 1 查询学生总人数;
- # ret1=Student.objects.count()
- # print(ret1)
- # # 2 查询生物课程或物理课程成绩都及格的学生id和姓名;
- # ret2=Score.objects.filter(course__cname__in=["生物","物理"],score__gte=60).values("student__sname","student__pk")
- # ret2=Score.objects.filter(course__cname__in=["生物","物理"],score__gte=60).values("student__pk").annotate(c=Count("course")).filter(c=2)
- # 3 查询每个年级的班级数,取出班级数最多的前三个年级名称;
- # ret=Grade.objects.annotate(c=Count("klass")).order_by("-c")[0:3]
- # print(ret)
- #
- # # 4 查询平均成绩最高的学生的id和姓名以及平均成绩;
- # ret=Score.objects.values("student").annotate(avg_score=Avg("score")).order_by("-avg_score").values("student__sname","student__pk","avg_score")[0]
- # print(ret)
- # # 5 查询每个年级的学生人数;
- # ret=Grade.objects.annotate(c=Count("klass__student__pk")).values("gname","c")
- # print(ret)
- # # 6 查询每位学生的学号,姓名,平均成绩;
- ret=Student.objects.values("sid","sname").annotate(avg_score=Avg("score__score"))
- print(ret)
- #ret=Student.objects.annotate(avg_score=Avg("score__score")).values("sid","sname","avg_score")
- # ret=Student.objects.annotate(avg_score=Avg("score__score")).values("sname","pk","avg_score")
- # print(ret)
- # 7 查询学生编号为“2”的学生的姓名、该学生成绩最高的课程名及分数;
- ret=Student.objects.filter(pk=2).order_by("-score__score").values("sname","score__course__cname","score__score")[0]
- print(ret)
- ret=Score.objects.filter(student__pk=2).order_by("-score").values("student__sname","course__cname","score")[0]
- print(ret)
- # ret=Score.objects.values("student").annotate(max_score=Max("score")).values("student__sname","max_score","course__cname")
- # ret = Score.objects.filter(student=2).order_by("-score").values("score", "course__cname", "student__sname")[0]
- # print(ret)
- # 8 查询每一个姓“李”的老师所带班级数;
- ret=Teacher.objects.filter(tname__istartswith="小").annotate(c=Count("classes")).values("tname","c")
- print(ret)
- # ret=Teacher.objects.filter(tname__startswith="李").annotate(c=Count("classes")).values("tname","c")
- # # 9 查询班级数小于5的年级id和年级名;
- Grade.objects.annotate(c=Count("klass")).filter(c__lt=5).values("pk","gname")
- # ret=Grade.objects.annotate(c=Count("klass")).filter(c__lt=5).values("pk","gname")
- # #10 查询教过课程超过2门的老师的id和姓名;
- ret=Teacher.objects.annotate(c=Count("course")).filter(c__gt=2).values("pk","tname")
- # ret=Teacher.objects.annotate(c=Count("course")).filter(c__gt=2).values("pk","tname")
- # # 11 查询学过编号“1”课程和编号“2”课程的同学的学号、姓名;
- ret=Student.objects.filter(score__course__cid=1).filter(score__course__cid=2).values("pk","sname")
- print(ret)
- # ret=Student.objects.filter(score__course__cid__in=[1,2]).values("pk","sname")
- #
- # # 12 查询所带班级数最多的老师id和姓名;
- ret=Teacher.objects.annotate(c=Count("classes")).order_by("-c").values("pk","tname")[0]
- # ret=Teacher.objects.annotate(c=Count("classes")).order_by("-c").values("pk","tname")[0]
- # # 13 查询有课程成绩小于60分的同学的学号、姓名;
- ret=Score.objects.filter(score__lt=60).values("student__sname","student__pk").distinct()
- print(ret)
- # ret=Score.objects.filter(score__lt=60).values("student__sname","student__pk").distinct()
- #
- # # 14 查询男生、女生的人数,按倒序排列;
- ret=Student.objects.values("gender").annotate(c=Count(1)).order_by("-c")
- # ret=Student.objects.values("gender").annotate(c=Count(1)).order_by("c").values("gender","c")
- # # 15 查询各个课程及相应的选修人数;
- ret=Score.objects.values("course").annotate(c=Count(1)).values("course__cname","c")
- print(ret)
- # ret=Score.objects.values("course").annotate(c=Count("student")).values("course__cname","c")
- # # 16 查询同时选修了物理课和生物课的学生id和姓名;
- # ret=Student.objects.filter(score__course__cname__in=["物理","生物"]).values("pk","sname")
- # # 17 检索“3”课程分数小于60,按分数降序排列的同学学号;
- Score.objects.filter(course_id=3,score__lt=60).order_by("-score").values("student_id")
- # ret=Score.objects.filter(course__cid=3,score__lt=60).order_by("score").values("student__sname","student__pk")
- #
- # # 18 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
- ret=Score.objects.values("course_id").annotate(c=Avg("score")).order_by("c","-course_id")
- # ret=Score.objects.values("course").annotate(avg_score=Avg("score")).order_by("avg_score","course")
- #
- # # 19 查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分;
- ret=Course.objects.annotate(max_score=Max("score__score"),min_score=Min("score__score")).values("pk","max_score","min_score")
- # ret=Course.objects.annotate(max_score=Max("score__score"),min_score=Min("score__score")).values("cname","max_score","min_score")
orm练习题的更多相关文章
- orm 练习题
一: 多表练习查询 1. 自行创建测试数据: 2. 查询学生总人数: 3. 查询“生物”课程和“物理”课程成绩都及格的学生id和姓名: 4. 查询每个年级的班级数,取出班级数最多的前三个年级: 5. ...
- Django学习之ORM练习题
一.表关系 创建表关系,并创建约束 班级表:class 学生表: student cid caption grade_id sid sname gender class_id 1 一年一班 1 1 乔 ...
- 9.14.16 Django ORM进阶用法
2018-9-14 14:26:45 ORM 练习题 : http://www.cnblogs.com/liwenzhou/articles/8337352.html 2018-9-14 21:1 ...
- Django orm练习
ORM练习题 models生成 from django.db import models # Create your models here. # 书籍管理 class Book(models.Mod ...
- 03-django模型(1)
一.内容回顾 1.路由层 a.简单使用 b.有名分组 c.路由分发 d.反向解析 2.视图层 a.HttpRequest对象 常用的属性 常用方法 b.HttpResponse对象 响应三剑客 3.模 ...
- day67 ORM模型之高阶用法整理,聚合,分组查询以及F和Q用法,附练习题整理
归纳总结的笔记: day67 ORM 特殊的语法 一个简单的语法 --翻译成--> SQL语句 语法: 1. 操作数据库表 创建表.删除表.修改表 2. 操作数据库行 增.删.改.查 怎么连数据 ...
- Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...
- python 之路,Day11(上) - python mysql and ORM
python 之路,Day11 - python mysql and ORM 本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...
- Day11 - Mysql and ORM
python 之路,Day11 - python mysql and ORM 本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 ...
随机推荐
- python 服务器 cpu 监控程序--转
后台 py 代码 app.py ''' 服务器cpu监控程序 思路:后端后台线程一旦产生数据,即刻推送至前端. 好处:不需要前端ajax定时查询,节省服务器资源. 作者:hhh5460 时间:2017 ...
- iOS-NSLog发布时取消打印日志
1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...
- docker inspect命令查看镜像详细信息
使用 inspect 命令查看镜像详细信息,包括制作者.适应架构.各层的数字摘要等. # docker inspect --help Usage: docker inspect [OPTIONS] N ...
- VUE点击颜色选中
- 一、Vue CLI
一.Vue CLI https://cli.vuejs.org/zh/guide/installation.html 介绍: 二.安装 # 安装 Vue Cli npm install -g @vue ...
- ARM汇编 汇编文件后缀.s与.S
有两套汇编的语法: ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编. ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言: GNU汇编即在Linux下用GCC编译的汇 ...
- 解决:java compiler level does not match the version of the installed java project facet错误
java compiler level does not match the version of the installed java project facet错误的解决 因工作的关系,Eclip ...
- 微信小程序-饮食日志_开发记录03
这段时间主要是收尾阶段. 美化界面,排版分部等. 并进行上传,审核. 环境部署一直出现问题,所以测试版食物查找查找不到. 主要问题是:https://的网页证书没有通过审核. 所以现在推行开发,调试版 ...
- 关于react中context的使用
context是用于组件间数据的传递,就是减少props的使用 具体使用也很简单 第一步设置默认值,第二部用provider发放,第三步使用contextType来接受最近的provider,然后直接 ...
- 用Java 实现断点续传 (HTTP)
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...