Django  ORM 练习题及答案


Posted in Python onJuly 19, 2019

1.modles中表结构

#出版社
class Publisher(models.Model):
  name = models.CharField(max_length=32)
  city = models.CharField(max_length=32)

  def __str__(self):
    return "<Publisher object: {} {}>".format(self.id, self.name)
#书籍
class Book(models.Model):
  title = models.CharField(max_length=32)
  publish_date = models.DateField(auto_now_add=True)
  price = models.DecimalField(max_digits=5,decimal_places=2)
  memo = models.TextField(null=True)
  #创建外键,关联Publisher
  Publisher = models.ForeignKey(to='Publisher')

  def __str__(self):
    return "<Book object: {} {}>".format(self.id, self.title

#作者
class Author(models.Model):
  name = models.CharField(max_length =32)
  age = models.IntegerField()
  phone = models.CharField(max_length=11)
  #创建多对多关联
  books = models.ManyToManyField(to='Book')

  def __str__(self):
    return "<Author object: {} {}>".format(self.id, self.name)

2.题目

"""
查找所有书名里包含金老板的书
查找出版日期是2018年的书
查找出版日期是2017年的书名
查找价格大于10元的书
查找价格大于10元的书名和价格
查找memo字段是空的书

查找在北京的出版社
查找名字以沙河开头的出版社

查找“沙河出版社”出版的所有书籍
查找每个出版社出版价格最高的书籍价格
查找每个出版社的名字以及出的书籍数量

查找作者名字里面带“小”字的作者
查找年龄大于30岁的作者
查找手机号是155开头的作者
查找手机号是155开头的作者的姓名和年龄

查找每个作者写的价格最高的书籍价格
查找每个作者的姓名以及出的书籍数量

查找书名是“跟金老板学开车”的书的出版社
查找书名是“跟金老板学开车”的书的出版社所在的城市
查找书名是“跟金老板学开车”的书的出版社的名称
查找书名是“跟金老板学开车”的书的出版社出版的其他书籍的名字和价格

查找书名是“跟金老板学开车”的书的所有作者
查找书名是“跟金老板学开车”的书的作者的年龄
查找书名是“跟金老板学开车”的书的作者的手机号码
查找书名是“跟金老板学开车”的书的作者们的姓名以及出版的所有书籍名称和价钱

"""

题目

3.测试数据

-- ----------------------------
-- Records of app01_author
-- ----------------------------
INSERT INTO `app01_author` VALUES ('1', '金老板', '18', '15512351234');
INSERT INTO `app01_author` VALUES ('2', '小哪吒', '20', '15312341234');
INSERT INTO `app01_author` VALUES ('3', 'Alex', '73', '15512341234');
 
-- ----------------------------
-- Records of app01_publisher
-- ----------------------------
INSERT INTO `app01_publisher` VALUES ('1', '沙河出版社', '北京');
INSERT INTO `app01_publisher` VALUES ('2', '西二旗出版社', '北京');
INSERT INTO `app01_publisher` VALUES ('3', '张江出版社', '上海');
INSERT INTO `app01_publisher` VALUES ('4', '沙河出版社', '上海');
 
-- ----------------------------
-- Records of app01_book
-- ----------------------------
INSERT INTO `app01_book` VALUES ('1', '跟金老板学开车', '2018-08-03', '12.90', null, '1');
INSERT INTO `app01_book` VALUES ('2', '跟金老板学开潜艇', '2017-08-10', '9.99', null, '1');
INSERT INTO `app01_book` VALUES ('3', '跟老男孩学思想', '2018-09-03', '39.99', null, '2');
INSERT INTO `app01_book` VALUES ('4', '跟egon学喊麦', '2018-06-12', '0.99', null, '4');
 
-- ----------------------------
-- Records of app01_book_author
-- ----------------------------
INSERT INTO `app01_book_author` VALUES ('3', '1', '1');
INSERT INTO `app01_book_author` VALUES ('4', '2', '1');
INSERT INTO `app01_book_author` VALUES ('5', '1', '2');
INSERT INTO `app01_book_author` VALUES ('2', '2', '2');
INSERT INTO `app01_book_author` VALUES ('6', '3', '3');
INSERT INTO `app01_book_author` VALUES ('7', '3', '4');

测试数据

4.答案

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORMHomework.settings")
import django
django.setup()

from app01 import models
from django.db.models import Max, Min, Sum, Avg, Count

# 查找所有书名里包含金老板的书
ret1= models.Book.objects.filter(title__contains='金老板')
# print (ret1)

#查找出版日期是2018年的书
ret2 = models.Book.objects.filter(publish_date__year=2018)
# print (ret2)

#查找出版日期是2017年的书名
ret3 = models.Book.objects.filter(publish_date__year=2017).values('title')
# print (ret3)

#查找价格大于10元的书
ret4 =models.Book.objects.filter(price__gt=10)
# print(ret4)

#查找价格大于10元的书名和价格
ret5 = models.Book.objects.filter(price__gt=10).values('title','price')
# print(ret5)

# 查找memo字段是空的书
ret6 = models.Book.objects.filter(memo__isnull=True)
# print(ret6)

#-----------------------------------------------------------------------------
# 查找在北京的出版社
ret7 = models.Publisher.objects.filter(city='北京')
# print(ret7)

# 查找名字以沙河开头的出版社
ret8 = models.Publisher.objects.filter(name__startswith='沙河')
# print(ret8)

#查找“沙河出版社”出版的所有书籍
ret9 =models.Book.objects.filter(Publisher__name='沙河出版社')
# print(ret9)

# 查找每个出版社出版价格最高的书籍价格
# ret10 = models.Publisher.objects.all().annotate(max=Max('book__price')).values('name','max')
# ret10 = models.Publisher.objects.annotate(max=Max('book_price')).values()
# for i in ret10 :
#   print(i)

# 查找每个出版社的名字以及出的书籍数量
ret11 = models.Publisher.objects.annotate(count=Count('book__title')).values('name','count')
# for i in ret11:
#   print(i)

#---------------------------------------------------------------------------------------------------------
#查找作者名字里面带“小”字的作者
ret12 = models.Author.objects.filter(name__contains='小')
# print(ret12)

#查找年龄大于30岁的作者
ret13 = models.Author.objects.filter(age__gt=30)
# print(ret13)

#查找手机号是155开头的作者
ret14 = models.Author.objects.filter(phone__startswith=155)
# print(ret14)

#查找手机号是155开头的作者的姓名和年龄
ret15 = models.Author.objects.filter(phone__startswith=155).values('name','age')
# print(ret15)

#查找每个作者写的价格最高的书籍价格
# ret16 = models.Author.objects.annotate(max=Max('books__price')).values('name','max')
ret16= models.Book.objects.values('author').annotate(max=Max('price')).values('author','max')
# for i in ret16:
#   print(i)

#查找每个作者的姓名以及出的书籍数量
# ret17 = models.Author.objects.all().annotate(count=Count('books__title')).values('name','count')
# for i in ret17 :
#   print(i)

#-------------------------------------------------------------------------------------------------------
#查找书名是“跟金老板学开车”的书的出版社
ret18 = models.Publisher.objects.filter(book__title='跟金老板学开车')
# print (ret18)

#查找书名是“跟金老板学开车”的书的出版社所在的城市
ret19 = models.Publisher.objects.filter(book__title='跟金老板学开车').values('city')
# print(ret19)

#查找书名是“跟金老板学开车”的书的出版社的名称
ret20 = models.Publisher.objects.filter(book__title='跟金老板学开车').values('name')
# print(ret20)

#查找书名是“跟金老板学开车”的书的出版社出版的其他书籍的名字和价格


pub_obj = models.Publisher.objects.get(book__title='跟金老板学开车')
ret21= pub_obj.book_set.all().exclude(title='跟金老板学开车').values('title','price')
print(ret21)

#查找书名是“跟金老板学开车”的书的所有作者
# ret22 = models.Author.objects.filter(books__title='跟金老板学开车')
# print(ret22)

#查找书名是“跟金老板学开车”的书的作者的年龄
# ret23 = models.Author.objects.filter(books__title='跟金老板学开车').values('name','age')
# print(ret23)

#查找书名是“跟金老板学开车”的书的作者的手机号码
# ret24 = models.Author.objects.filter(books__title='跟金老板学开车').values('name','phone')
# print(ret24)

#查找书名是“跟金老板学开车”的书的作者们的姓名以及出版的所有书籍名称和价钱

# ret25= models.Author.objects.filter(books__title='跟金老板学开车')
# print(ret25)
# for i in ret25:
#   print(i.books.all().values('title','price'))

#
# ret = models.Book.objects.aggregate(Max('price'))
# print(ret)

ret25 = models.Author.objects.values('name','books__title','books__price').filter(books__title='跟金老板学开车')
print(ret25)

答案

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
python构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python 基础之字符串string详解及实例
Apr 01 Python
实例讲解Python3中abs()函数
Feb 19 Python
在Python中使用Neo4j的方法
Mar 14 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
Feb 03 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
Django之提交表单与前后端交互的方法
Jul 19 #Python
解决Python3 抓取微信账单信息问题
Jul 19 #Python
Django 数据库同步操作技巧详解
Jul 19 #Python
浅谈Python中函数的定义及其调用方法
Jul 19 #Python
python 处理微信对账单数据的实例代码
Jul 19 #Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 #Python
python障碍式期权定价公式
Jul 19 #Python
You might like
Banner程序
2006/10/09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
2007/08/17 Javascript
js中的string.format函数代码
2020/08/11 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
党员教师个人对照检查材料范文
2014/09/25 职场文书
奖金申请报告模板
2015/05/15 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
DE1107机评
2022/04/05 无线电