models(创建表):

class Grade(models.Model):
"""年级表"""
gname=models.CharField(max_length=32) class Classes(models.Model):
"""班级表"""
caption=models.CharField(max_length=32)
grade=models.ForeignKey("Grade", on_delete=models.CASCADE)
teach_cls = models.ManyToManyField('Teacher') class Teacher(models.Model):
"""老师表"""
tname=models.CharField(max_length=32) class Course(models.Model):
"""课程表"""
cname=models.CharField(max_length=32)
teacher=models.OneToOneField("Teacher", on_delete=models.CASCADE) class Student(models.Model):
"""学生表"""
sname = models.CharField(max_length=32)
gender = models.CharField(max_length=10)
classes = models.ForeignKey("Classes",on_delete=models.CASCADE) class Score(models.Model):
"""成绩表"""
student = models.ForeignKey("Student",on_delete=models.CASCADE)
course = models.ForeignKey("Course",on_delete=models.CASCADE)
score=models.IntegerField()

插入数据:

def orm_insert(request):
"""orm表记录插入""" # 教师表插入
t1 = Teacher.objects.create(tname="张三")
t2 = Teacher.objects.create(tname="李四")
t3 = Teacher.objects.create(tname="王五") # 年级表插入
g1 = Grade.objects.create(gname="一年级")
g2 = Grade.objects.create(gname="二年级")
g3 = Grade.objects.create(gname="三年级") # 课程表插入
c1 = Course.objects.create(cname="生物",teacher_id=1)
c2 = Course.objects.create(cname="体育",teacher_id=2)
c3 = Course.objects.create(cname="物理",teacher_id=3) # 班级表
cl1 = Classes.objects.create(caption="一年一班",grade_id=1)
cl11 = Classes.objects.create(caption="一年二班",grade_id=1)
cl2 = Classes.objects.create(caption="二年一班",grade_id=2)
cl22 = Classes.objects.create(caption="二年二班",grade_id=2)
cl3 = Classes.objects.create(caption="三年一班",grade_id=3)
cl33 = Classes.objects.create(caption="三年二班",grade_id=3)
cl1.teach_cls.add(t1,t2,t3)
cl11.teach_cls.add(t1)
cl2.teach_cls.add(t2,t3)
cl22.teach_cls.add(t1,t3)
cl3.teach_cls.add(t3)
cl33.teach_cls.add(t1,t2,t3) # 学生表
s1 = Student.objects.create(sname="刘龙康",gender='男',classes_id=1)
s2 = Student.objects.create(sname="小胖",gender='男',classes_id=1)
s3 = Student.objects.create(sname="小明",gender='男',classes_id=2)
s4 = Student.objects.create(sname="小红",gender='女',classes_id=3)
s5 = Student.objects.create(sname="小花",gender='女',classes_id=4)
s6 = Student.objects.create(sname="刘能",gender='女',classes_id=5)
s7 = Student.objects.create(sname="胖妞",gender='女',classes_id=1) # 成绩表
sc1 = Score.objects.create(student=s1,course=c1,score=60)
sc2 = Score.objects.create(student=s1,course=c2,score=80)
sc3 = Score.objects.create(student=s1,course=c3,score=90)
sc4 = Score.objects.create(student=s2,course=c1,score=60)
sc5 = Score.objects.create(student=s2,course=c2,score=70)
sc6 = Score.objects.create(student=s7,course=c2,score=100)
sc7 = Score.objects.create(student=s3,course=c3,score=30)
sc8 = Score.objects.create(student=s4,course=c1,score=20)
sc9 = Score.objects.create(student=s5,course=c1,score=60)
sc10 = Score.objects.create(student=s6,course=c1,score=80)
sc11 = Score.objects.create(student=s7,course=c1,score=20)
return HttpResponse("ok")

查询练习:

def orm_search(request):
"""orm作业查询"""
# 1.查询学生总人数;
# ret = Student.objects.aggregate(student_count=Count('id'))
# ret = Student.objects.count() # 2.查询生物课程和物理课程成绩都及格的学生id和姓名
# ret = Student.objects.annotate(jgs=Count('id')).filter(score__course__cname__in=['生物','物理'],score__score__gte=60,jgs=2).values("id","sname") # 3.查询每个年级的班级数,取出班级数最多的前二个年级
# ret = Grade.objects.annotate(cls_count=Count('classes__grade')).order_by('-cls_count').values('gname','cls_count') # 4.查询平均成绩最高的学生的id和姓名以及平均成绩
# ret = Student.objects.annotate(avg_score=Avg('score__score')).order_by('-avg_score').values('id','sname','avg_score')[0] # 5.查询每个年级的学生人数
# ret = Grade.objects.annotate(stu_count=Count('classes__student__id')).values('gname','stu_count') # 6.查询每位学生的学号,姓名,平均成绩
# ret = Student.objects.annotate(stu_avg=Avg('score__score')).values('id','sname','stu_avg') # 7.查询学生编号为2的学生姓名,该学生成绩最高的课程名及分数
# ret = Student.objects.filter(id=2).values('sname','score__course__cname','score__score').order_by('-score__score')[0]
# ret = Student.objects.filter(id="2").annotate(scoreMax=Max("score__score")).order_by('-scoreMax')[0:1].values("sname", "score__course__cname", "scoreMax") # 8.查询姓李的老师的个数和所带班级数
# ret = Teacher.objects.filter(tname__startswith='李').annotate(cls_count=Count('classes')).values('tname','cls_count') # 9.查询班级数小于3的年级id和年级名
# ret = Grade.objects.annotate(cls_count=Count('classes')).values('id','gname','cls_count').filter(cls_count__lt=3) # 10.查询教过课程超过2门的老师的id和姓名
# ret = Teacher.objects.annotate(cour_count=Count('course')).filter(cour_count__gte=1).values('id','tname','cour_count') # 11.查询教过超过3个班级的老师的id和姓名
# ret = Teacher.objects.annotate(cls_count=Count('classes')).filter(cls_count__gte=3).values('id','tname','cls_count') # 12.查询学过编号1课程和编号2课程的同学的学号,姓名
# ret = Student.objects.filter(score__course__in=[1,2]).annotate(course_count=Count('score')).filter(course_count=2).values('id','sname','course_count') # 13.查询只学过编号1课程和编号2课程的同学的学号,姓名
# ret1 = Student.objects.annotate(course_count=Count('score')).filter(course_count=2).values('id','sname','course_count')
# ret2 = Student.objects.filter(score__course__in=[1,2]).annotate(course_count=Count('score')).filter(course_count=2).values('id','sname','course_count')
# for i in ret1:
# for j in ret2:
# if i==j:
# print(i)
# 这个方法好
# ret = Student.objects.annotate(course_count=Count('score')).filter(score__course=1).filter(score__course=2).filter(course_count=2).values('id','sname') # 14.查询所带班级数最多的老师id和姓名
# ret = Teacher.objects.annotate(cls_count=Count('classes')).values('id','tname','cls_count').order_by('-cls_count')[0] # 15.查询有课程成绩小于60分的同学的学号,姓名
# ret = Student.objects.filter(score__score__lt=60).annotate(stu_score=Count('score')).filter(stu_score__gte=1).values('id','sname','stu_score') # 16.查询男生,女生的人数,按倒序排列
# ret = Student.objects.values('gender').annotate(c=Count('id')).order_by('-c') # 17.查询各个课程及相应的选修人数
# ret = Course.objects.annotate(stu_count=Count('score')).values('cname','stu_count') # 18.查询同时选修了物理课和生物课的学生id和姓名
# ret = Student.objects.filter(score__course__cname__in=['物理','生物']).annotate(course_count=Count('score__course')).filter(course_count=2).values('id','sname','course_count')
# ret = Student.objects.annotate(c=Count('score__course')).filter(c=2).filter(score__course__cname="物理").filter(score__course__cname="生物").values("id", "sname") # 19.检索3课程分数小于60,按分数降序排列的同学学号
# ret = Course.objects.filter(score__course=3,score__score__lt=60).order_by('score__score').values('score__student','score__student__sname') # 20.检查每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
# ret = Course.objects.annotate(score_avg=Avg('score__score')).order_by('score_avg','-id').values('id','cname','score_avg') # 21.查询各科成绩最高和最低分:以如下形式显示:课程ID,最高分,最低分
ret = Course.objects.annotate(max_score=Max('score__score'),min_score=Min('score__score')).values('id','cname','max_score','min_score')
print(ret)
return HttpResponse("ok")

Django的orm练习的更多相关文章

  1. python——Django(ORM连表操作)

    千呼万唤始出来~~~当当当,终于系统讲了django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...

  2. Python’s SQLAlchemy vs Other ORMs[转发 3]Django's ORM

    Django's ORM Django is a free and open source web application framework whose ORM is built tightly i ...

  3. 将SALT_STACK的JOB-CACHE放到数据库中,而建库用DJANGO的ORM完成

    下面包括了SALT_MASTER的配置,及DJANGO的ORM里更改默认表名称,更改默认字段名称(里面有个RETURN),更改默认ID索引... 一个下午有和它磨来磨去... 感谢鹏龙,感谢高远..: ...

  4. Django:之ORM、CMS和二维码生成

    Django ORM Django 的数据库接口非常好用,我们甚至不需要知道SQL语句如何书写,就可以轻松地查询,创建一些内容,所以有时候想,在其它的地方使用Django的 ORM呢?它有这么丰富的 ...

  5. Django的ORM实现数据库事务操作

    在Django中实现数据库的事务操作 在学习MySQL数据库时,MySQL数据库是支持原子操作的. 什么是数据库的原子操作呢??打个比方,一个消费者在一个商户里刷信用卡消费. 交易正常时,银行在消费者 ...

  6. 第十九章 Django的ORM映射机制

    第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...

  7. Django之ORM基础

    ORM简介 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  8. Django中ORM介绍和字段及其参数

    ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  9. ORM以及Django使用ORM创建表

    day61 2018-04-28 1. 内容回顾 1. HTTP协议消息的格式: 1. 请求(request) 请求方法 路径 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n ...

  10. django的ORM

    在项目根目录下运行 python manage.py shell 即可进入django的交互shell界面 查询 from my_app.models import MyTestModel datas ...

随机推荐

  1. spring Ioc/DI的理解

    学习spring的童鞋都知道,spring中有两个非常重要的点,Ioc(控制反转)与DI(依赖注入),对于初级玩家来说,这两个概念可能有点模棱两可的感觉,今天就谈下自己的一点理解,不足请多多指教!!! ...

  2. 如何用 putty 连接远程 Linux 系统

    如何用 putty 连接远程 Linux 系统 Putty 简介 Putty 是一个免费的.Windows x86 平台下的 Telnet.SSH 和 Rlogin 客户端,但是功能丝毫不逊色于商业的 ...

  3. 安卓新发布机制----app bundle

    Android App Bundle是一种改进的应用程序打包方式,能大幅度减少应用体积 unity可以直接导出appbundle,只需要在导出的时候勾选 但是通常项目有sdk离不开java端,我这里是 ...

  4. Python面试-DB相关

    昨日回顾: 面试 Python综述 设计哲学 版本变迁及发展 GIL 内存管理及垃圾回收 并发并行 昨日作业一:Python是否存在内存泄露 作业二:过往的项目中有没有出现过性能问题? 作业三:什么是 ...

  5. Django 数据库操作

    Django 数据库操作 Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个 ...

  6. 联想H430怎么清除cmos密码?

    联想H430怎么清除cmos密码? 方法一:长时间对cmos放电 首先断掉主机电源,然后找到主板上的纽扣电池,将电池小心取出,然后使用一金属导体,短接电池座中的正负极,这样也可达到快速放电的目的. 有 ...

  7. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念

    linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  8. ASP.NET Core EFCore 之Code First

    1.在.NET Core项目中使用Nuget引用包 Sql Server 请安装 Microsoft.EntityFrameworkCore.SqlServer 2.添加实体类 [Table(&quo ...

  9. nginx加php(一)

    yum install nginx 安装php7.3https://kifarunix.com/installing-php-7-3-3-on-centos-7-6/ yum install epel ...

  10. [c++] 用宏定义一个函数

    要点:变量都用括号括起来,防止出错,结尾不需要;.在实际编程中,不推荐把复杂的函数使用宏,不容易调试.多行用\ 要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和 ...