作业1

创建单表Book表,要求字段:

1 主键 nid
2 书名 title
3 价格 price
4 出版日期 pubDate
5 出版社 publisher(普通字符串字段)

class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5, decimal_places=2)
publishDate = models.DateTimeField()
publisher = models.CharField(max_length=64)

作业2

添加多条记录后,

查询:

(1) 查询所有书籍的名称

Book.objects.all().values("title")
(2) 查询价格大于100的书籍名称以及价格 Book.objects.filter(price__gt=100).values("title","price")
(3) 查询2017年出版的所有以py开头的书籍名称 Book.objects.filter(pubDate__year="",title__startswith="py").values("title") (4) 查询价格为50,100或者150的所有书籍名称及其出版社名称 Book.objects.filter(price__in=[50,100,150]).values("title","pubDate")
(5) 查询所有主键大于2小于5书籍的价格(去重) Book.objects.filter(nid__gt=2,nid__lt=5).values("price").distinct()
(6) 查询所有人民出版社出版的书籍的价格(从高到低排序,去重) Book.objects.filter(publisher="人民出版社").values("price").order_by("-price").distinct()

作业3

models.py

class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
publishDate = models.DateField()
price = models.DecimalField(max_digits=5, decimal_places=2) read_num=models.IntegerField(default=0)
commnet_num=models.IntegerField(default=0)
poll_num=models.IntegerField(default=0) # publish:与当前书籍对象关联的的出版社对象,与Publish建立一对多的关系,外键字段建立在多的一方
publish=models.ForeignKey(to="Publish",to_field="id") # authors: 与当前书籍关联的所有作者的集合
# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors=models.ManyToManyField(to="Author")
def __str__(self):
return self.title
class Author(models.Model):
name=models.CharField(max_length=32)
age=models.IntegerField() class AuthorDetail(models.Model):
tel=models.CharField(max_length=32)
email=models.CharField(max_length=32) #与Author建立一对一的关系
author=models.OneToOneField("Author") class Publish(models.Model):
name=models.CharField(max_length=32)
email=models.CharField(max_length=32) def __str__(self):
return self.name

models.py

基于图书管理系统的表关系与数据,进行如下查询
要求:1-5查询分别基于对象查询,双下划线查询,以及找到对应翻译的sql语句 1、查询人民出版社出版过的价格大于100的书籍的作者的email
Book.objects.filter(publish__name="人民出版社",price__gt=100).values("authors__authordetail__email")
2、查询alex出版过的所有书籍的名称以及书籍的出版社的名称
Book.objects.filter(authors__name="alex").values("title","publish__name")
3、查询2011年出版社过的所有书籍的作者名字以及出版社名称
Book.objects.filter(publishDate__year=2011).values("publish__name","authors__name")
4、查询住在沙河并且email以123开头的作者写过的所有书籍名称以及书籍的出版社名称
Author.objects.filter(authordetail__addr="沙河",authordetail__email__startswith="").values("book__title","book__publish__name")
5、查询年龄大于20岁的作者在哪些出版社出版过书籍
Publish.objects.filter(book__authors__age__gt=20).values("name)
6、查询每一个出版社的名称以及出版过的书籍个数
Publish.objects.all().annotate(c=Count("book__id")).values("name","c")
7、查询每一个作者的名字以及出版过的所有书籍的最高价格
Author.objects.all().annotate(m=Max("book__price")).values("name","m")
8、查询每一本书的名字,对应出版社名称以及作者的个数
Book.objects.all().annotate(c=Count("authors")).values("c","title","publish__name")

【django之orm小练习】的更多相关文章

  1. Django 源码小剖: Django 对象关系映射(ORM)

    引 从前面已经知道, 一个 request 的到来和一个对应 response 的返回的流程, 数据处理和数据库离不开. 我们也经常在 views.py 的函数定义中与数据库打交道. django O ...

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

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

  3. 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 ...

  4. Django中ORM实际应用

    1. Django中ORM的使用 1. 手动新建一个数据库 2. 告诉Django连接哪个数据库 settings.py里面配置数据库连接信息: # 数据库相关的配置项 DATABASES = { ' ...

  5. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...

  6. Django之ORM操作总结

    Django之ORM总结 表结构 from django.db import models # 一对多:班级与学生 # 多对多:班级与老师 # Create your models here. #创建 ...

  7. Django之ORM初始

    上一篇写了一个静态的登录验证. 实景情况网页的登录验证都是动态验证的,过程其实是从后端拿到储存的账户与密码来和前端的输入信息进行匹配校验的. 一.把项目拆分,来一个单独登录的包,放在Django项目下 ...

  8. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  9. Django的orm中get和filter的不同

    Django的orm框架对于业务复杂度不是很高的应用来说还是不错的,写起来很方面,用起来也简单.对于新手来说查询操作中最长用的两个方法get和filter有时候一不注意就会犯下一些小错误.那么今天就来 ...

随机推荐

  1. Django----->Ajax

    一,前情回顾(Json) Json的定义: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的 ...

  2. 51 Nod 1007 正整数分组【类01背包】

    1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组, ...

  3. JSZX_HC_2016_R5

    #1 ccz 200 #2 CTL 130 #3 KPM 130 本来以为准备挺充分的,开始后还是出现一些状况 >_< 好在还算顺利…… A AC人数:4   平均分:70 题目描述 给定 ...

  4. bzoj:1941: [Sdoi2010]Hide and Seek

    1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 531  Solved: 295[Submi ...

  5. HDU 1010 Tempter of the Bone【DFS经典题+奇偶剪枝详解】

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  6. 【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)

    在Vue中的项目,基于VUX-UI开发,一个常见的需求: 1.金额输入框 2.弹出数字键盘 3.仅支持输入两位小数,限制最大11位数,不允许0开头 后续:与UI沟通后, 思路调整为限制输入,并减少正则 ...

  7. centos7 hue安装

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  8. 教你理解微信小程序的生命周期和运行原理

    转自:http://blog.csdn.net/tsr106/article/details/53052879  写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君 ...

  9. dblink实现不同用户之间的数据表访问

    1.dblink 1.创建dblink,如果在用户A下创建dblink,名称为TEST_DBLINK; 去操作GCFR_33用户下的表数据等等, 那么在查询表数据的sql就要加上dblink了.如下是 ...

  10. HDU 1213 How Many Tables(模板——并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday ...