orm 练习题
一: 多表练习查询

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,最高分,最低分;
二:
表关系:

from django.shortcuts import render, HttpResponse, reverse
from django.urls import reverse
from app01 import models
# Create your views here.
def show(request):
# 一对多 创建
# 方式一 传对象
# pub_obj =models.Publish.objects.filter(id=1).first()
# print(pub_obj ,type(pub_obj))
# book =models.Book.objects.create(title="swsw",price=280,pub_date="2018-12-21",publish=pub_obj)
# 方式二 传id 创建
# book =models.Book.objects.create(title="chsea",price=221,pub_date="2019-12-28",publish_id=pub_obj.pk)
# 多对多创建
# 方式一
# book_obj =models.Book.objects.filter(id =2).first()
# a1 =models.Author.objects.filter(name="matai").first()
# a2 =models.Author.objects.filter(name="lhc").first()
# book_obj.authors.add(a1,a2)
# book_obj = models.Book.objects.filter(id=3).first()
# a1 = models.Author.objects.filter(name="matai").first()
# a2 = models.Author.objects.filter(name="lhc").first()
# book_obj.authors.add(a1.pk, a2.pk)
# pub_obj =models.Publish.objects.filter(id =2).first()
# print(pub_obj.book_set.remove(),type(pub_obj.book_set))
# book_obj=models.Book.objects.filter(pk=1).first()
# print(book_obj.publish.city)
# pub_obj =models.Publish.objects.filter(id=2).first()
# print(pub_obj.book_set.all(),type(pub_obj.book_set.all()))
# for i in pub_obj.book_set.all():
# print(i.title)
# 一对一查询
# au_obj = models.Author.objects.filter(id=3).first()
# print(au_obj.au_detail.tel)
# au_addr = models.AuthorDetail.objects.filter(id=2).first()
# print(au_addr.author.name)
# 多对多查询
# book_obj =models.Book.objects.filter(id=2).first()
# for i in book_obj.authors.all():
# print(i.name,i.au_detail.tel)
# au_obj =models.Author.objects.filter(id=3).first()
# for j in au_obj.book_set.all():
# print(j.title)
'''1、查询丐帮出版社出版的所有书名和作者名称;
2、查询独孤九剑的作者名称和出版社名称;
3、查询吸星大法的作者的姓名、电话和地址;
4、查询令狐冲写的书籍,在哪些出版社出版过,获取其出版社名称和地址;
5、查询出版社地址为黑木崖,在该出版社出版过书籍的作者姓名和邮箱;
'''
# 正向查询按字段, 反向查询按小写表名。
# 1方式1 正向 双下
# books1 =models.Book.objects.filter(publish__id=2).values("title","authors__name")
# print(books1)
# print(">>>>>>>>>>>>>>>>>")
# # 1方式2 反向 双下
# books2 =models.Publish.objects.filter(id=2).values("book__title","book__authors__name")
# print(books2)
# # 1 方式3 反向
# pub1 =models.Publish.objects.filter(id=2).first()
# for i in pub1.book_set.all():
# for j in i.authors.all():
#
# print(i.title,j.name)
# 2 方法1
# books1 =models.Book.objects.filter(id=2).values("authors__name","publish__name")
# print(books1)
# #2 方法2
# books2 =models.Author.objects.filter(book__id=2).values("name","book__publish__name")
# print(books2)
# #2 方法3
# books3 =models.Book.objects.filter(id=2)
# for i in books3:
# name,pub=i.authors.all(),i.publish.name
# for j in name:
# print(j.name,i.publish)
# 3、查询吸星大法的作者的姓名、电话和地址;
# 3 方法1:
# books1=models.Book.objects.filter(id=3).values("authors__name","authors__au_detail__tel","authors__au_detail__addr")
#
# print(books1)
# #3 方法2:
# books2 =models.Author.objects.filter(book__id=3).values("name","au_detail__tel","au_detail__addr")
# print(books2)
# # 3 方法3:
# books3 =models.Book.objects.filter(id=3).first().authors.all()
# for i in books3:
# print(i.name,i.au_detail.tel,i.au_detail.addr)
# 4、查询令狐冲写的书籍,在哪些出版社出版过,获取其出版社名称和地址;
# 4 方法1:
# books1 =models.Author.objects.filter(id=3).values("book__title","book__publish__name","book__publish__city")
# print(books1)
# # 4 方法2:
# books2 =models.Book.objects.filter(authors__id=3).values("title","publish__name","publish__city")
# print(books2)
# #4 方法3 :
# books3 =models.Author.objects.filter(id=3).first()
# for i in books3.book_set.all():
# print(i.title,i.publish.name,i.publish.city)
#
# 5 5、查询出版社地址为黑木崖,在该出版社出版过书籍的作者姓名和邮箱;
# 5 方法1 :
books1 =models.Publish.objects.filter(id=2).values("book__title","book__authors__name","book__authors__au_detail__addr")
print(books1)
# 5 方法2:
books2 =models.Book.objects.filter(publish_id=2).values("title","authors__name","authors__au_detail__addr")
print(books2)
# 5 方法3:
books3 =models.Publish.objects.filter(id=2).first()
for i in books3.book_set.all():
for j in i.authors.all():
print(i.title,j.name)
return HttpResponse("okok199999999")
orm 练习题的更多相关文章
- orm练习题
表关系图 models.py from django.db import models # Create your models here. class Teacher(models.Model): ...
- 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命令 创建数据库 ...
随机推荐
- proc demo
源文件test.pc #include <stdio.h> #include <string.h> #include <stdlib.h> #include &qu ...
- 局部方法$("html").load()和全局方法$.get()、$.post()
一..load() .load()方法可以参数三个参数:url(必须,请求 html 文件的 url 地址,参数类型为 String).data(可选,发送的 key/value 数据,参数类型为 O ...
- 微分方程数值解Euler法
微分方程:dy/dt=1+y; 解是y=2exp(x)-1; clc clear figure() dx=0.1; x=:dx:; y=zeros(size(x)); x()=; y()=; :len ...
- HDU 1050 Moving Tables (贪心)
题意:在一个走廊两边都有对称分布的连续房间,现在有n张桌子需要从a移动到b房间.每次移动需要10分钟, 但是如果两次移动中需要经过相同的走廊位置,则不能同时进行,需要分开移动.最后求最少需要多长时间移 ...
- LA 4329 Ping pong (树状数组)
题意:从左到右给你n个不同的数值,让你找出三个数值满足中间的数值在两边的数值之间的个数. 析:题意还是比较好理解的,关键是怎么求数量,首先我们分解一下只有两种情况,一个是左边<中间<右边, ...
- SharpMap源代码解析
1. 简介 SharpMap是基于.net2.0的GIS系统.支持多种.NET开发语言(C# C++ 等).使用属性数据作为注记.符合OpenGIS的简单要素规范(OpenGIS Simple Fea ...
- spring aop方式配置事务中的三个概念 pointcut advice advisor
AOP的3个关键概念 因为AOP的概念难于理解,所以在前面首先对Java动态代理机制进行了一下讲解,从而使读者能够循序渐进地来理解AOP的思想. 学习AOP,关键在于理解AOP的思想,能够使用AOP. ...
- Window 64bit环境搭建Web Starter Kit
最近在学习https://developers.google.com/web/fundamentals/这里的内容,其中就有一部分是安装Web Starter Kit的教程,我总结一下自己的安装过程. ...
- Windows.Web.Http.HttpClient.GetStringAsync 总是返回相同的结果
今天在测试博客园新闻WP8.1客户端的时候,发现电脑上浏览的新闻已经更新了.但手机上的还没更新,于是想到肯定是有bug了.于是建了一个Web测试项目,发现只有第一次发出了请求.一开始以为是MVVM的问 ...
- 开源WebGIS实施方案(六):空间数据(PostGIS)与GeoServer服务迁移
研发环境的变更,或者研发完成进行项目现场实施.运维的时候,经常就会面临数据及服务的迁移,这其中就包含空间数据以及GeoServer服务的迁移工作. 这里需要提醒的是:如果采用的是类似的开源WebGIS ...