1 分组查询

 # 分组查询
# 查询每一个出版社id,以及图书平均价格(单表)
# 原生sql
# select publish_id,avg(price) from app01_book group by publish_id;
# orm 实现
"""标准 annotate() 内写聚合函数 QuerySet对象的方法
values在前,表示group by 的字段
values在后,表示取字段
filter在前,表示where条件
filter在后,表示having 分组之后
"""
from django.db.models import Avg,Sum,Count,Max
# res = models.Book.objects.all().values('publish_id').annotate(price_avg=Avg('price')).values('publish_id','price_avg')
# print(res) # 查询出版社id大于1的出版社id,以及出书平均价格
# res = models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_avg=Avg('price')).values('publish_id','price_avg')
# print(res)
# 查询出版社id大于1的出版社id,以及出书平均价格大于30的
# res = models.Book.objects.values('publish_id').filter(publish_id__gt=1).annotate(price_avg=Avg('price')).filter(price_avg__gt=30).values('publish_id','price_avg')
# print(res)
# 查询每一个出版社出版的名称和书籍个数(连表)
# 连表的话最好以group by的表作为主表
# 最后一个values只能取Publish表中的字段和annotate中的字段
# res = models.Publish.objects.values('nid').annotate(book_count=Count('book__nid')).values('name','book_count')
# 简写 如果基表是group by 的表,就可以不写values
# res = models.Publish.objects.annotate(book_count=Count('book')).values('name','book_count')
# 以book为基表
# res = models.Book.objects.values('publish__nid').annotate(book_count=Count('nid')).values('publish__name','book_count')
# print(res) # 查询每个作者的名字,以及出版过书籍的最高价格(建议使用分组的表作为基表)
# 多对多如果不以分组表为基表,可能会出数据问题
# res = models.Author.objects.annotate(price_max=Max('book__price')).values('name','price_max')
# res = models.Book.objects.values('authors__nid').annotate(price_max=Max('price')).values('authors__name','price_max')
# print(res) # 查询每一个书籍的名称,以及对应的作者个数
# res = models.Book.objects.annotate(author_count=Count('authors__name')).values('name','author_count')
# res = models.Book.objects.annotate(author_count=Count('authors')).values('name','author_count')
# print(res) # 统计不止一个作者的图书
# res = models.Book.objects.annotate(author_count=Count('authors')).filter(author_count__gt=1).values('name','author_count')
# print(res)
# 统计价格数大于10元,作者的图书
# res = models.Book.objects.values('price').filter(price__gt=10).annotate(author_count=Count('authors')).values('name','author_count')
# res = models.Book.objects.filter(price__gt=10).annotate(author_count=Count('authors')).values('name','author_count')
# print(res) # 统计价格数大于10元,作者个数大于1的图书
# res = models.Book.objects.values('price').filter(price__gt=10).annotate(author_count=Count('authors')).filter(author_count__gt=1).values('name')
# res = models.Book.objects.filter(price__gt=10).annotate(author_count=Count('authors')).filter(author_count__gt=1).values('name','price','author_count')
# print(res)

2 图书管理系统项目

1 后端是django+mysql/sqlite
2 前端:jquery,bootstrap
3 首页,图书列表展示,图书新增,修改,作者展示,新增,修改,出版社展示,新增,修改...
4 项目地址:https://gitee.com/liuqingzheng/books

补充

1 wsgi, uwsgi, cgi, fastcgi

浏览器只能发出HTTP的请求
本质上:浏览器是一个socket客户端,服务器是一个socket服务端
web服务器性能的高低决定了整个项目性能的高低
请求对象environment 字典 =》 request对象=》Django框架()
start_response响应对象 python:有wsgi协议,uwsgi,gunicorn
java:Tomcat,Jboss
php:php服务器 wsgi:协议,规定了如何拆HTTP请求,拆到一个python字典中,
environment,响应对象,start_response
wsgiref:符合wsgi协议的web服务器 CGI:通用网关接口。一句话总结:一个标准,定义了客户端服务器之间如何传数据 FastCGI:快速通用网关接口。一句话总结:CGI的升级版 WSGI:Web服务器网关接口。一句话总结:为python定义的web服务器和web框架之间的接口标准 uWSGI:用c语言写的,性能比较高 一句话总结:一个Web Server,即一个实现了WSGI的服务器,大体和Apache是一个类型的东西,处理发来的请求 uwsgi:是一种通信协议 uWSGI自有的协议
详情见:http://liuqingzheng.top/article/1/05-CGI,FastCGI,WSGI,uWSGI,uwsgi%E4%B8%80%E6%96%87%E6%90%9E%E6%87%82/ # asgi协议 异步服务网关接口

回顾

1 分组查询
-把同一类归为一组,然后使用聚合函数操作
-如果是多表,把两个表连起来,再分组,再聚合
-取得字段必须是分组字段或者聚合函数的字段
如果是单表只能取分组字段和聚合函数聚合的字段
如果是多表可以取分组表中的所有字段和聚合函数的字段
-总结:
-annotate(聚合函数)
-values在前,表示分组字段
-values在后,表示取字段
-filter在前,表示where条件
-filter在后,表示having条件
2 wsgi,uWSGI,uwsgi,cgi,fastcgi
3 前后端开发模式
-动态网站(网页的内容是由数据库渲染过来的 每次刷新都不一样)和静态网站(一个死页面 不变)
-前后端分离:后端只写后端,返回json格式字符串,js语言 DOM vue react
-前后端混合开发:模板,dtl(模板语法 本质就是字符串的替换),jsp,php 4 图书管理系统
-后端是Django+mysql+bootstrap (主机管理系统,人事管理系统,文档分享平台)
-图书增删查改
-增,删,查
-出版社的增删查改
-作者的增删查改 页面静态化

Django学习——分组查询、图书管理系统项目、wsgi, uwsgi, cgi, fastcgi的更多相关文章

  1. Linux-基础学习(四)-部署图书管理系统项目

    部署图书管理项目需要以下软件 项目文件(django项目文件夹) 数据库文件(django项目对应的数据库文件) centos7(linux本体) nginx(反向代理以及静态文件收集) uWSGI( ...

  2. Django实现简单的图书管理系统

    目录 Django写图书管理系统 功能截图 创建Django项目 开始项目 配置文件 建立路由关系 开始写Django项目 编写核心逻辑函数 写前端页面 add_author.html add_boo ...

  3. Django聚合分组查询、常用字段

    首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...

  4. Django数据库查询优化-事务-图书管理系统的搭建

    数据库查询优化 优化:虽然减轻了数据库的压力,但查询速度大大的减慢 ORM内所有的语句操作,默认都是惰性查询,只有你在真正的需要数据的时候才会走数据, 如果你只是写ORM语句时,是不会走数据库的,这样 ...

  5. Python-Flask框架之"图书管理系统"项目,附详解源代码及页面效果截图

    该图书管理系统要实现的功能如下: 1. 可以通过添加窗口添加书籍或作者,如果要添加的作者和书籍已存在于书架上, 则给出相应的提示: 2. 如果要添加的作者存在,而要添加的书籍书架上没有,则将该书籍添加 ...

  6. Python - Django - ORM 分组查询补充

    单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...

  7. Django学习之三:django-admin 和 项目manage.py程序

    目录 Django django-admin 和 项目manage.py程序 它俩是什么? 命令程序用法 常用命令 Django django-admin 和 项目manage.py程序 它俩是什么? ...

  8. Django学习---多人博客项目(1)

    一.创建项目和应用 ​ 在Pycharm中用Django模板创建一个工程文件 创建项目 python manage.py startproject 项目名 . 创建应用 python manage.p ...

  9. Group by 分组查询 实战

    实战经历,由于本人在共享单车上班,我们的单车管理模块,可以根据单车号查询单车,但是单车号没有设置unique(独一无二约束),说以这就增加了单车号可能重复的风险,但是一般情况下,单车号是不会重复的,因 ...

随机推荐

  1. 什么是可重入锁ReentrantLock?

    举例来说明锁的可重入性 public class UnReentrant{ Lock lock = new Lock(); public void outer(){ lock.lock(); inne ...

  2. Spring框架中的单例bean是线程安全的吗?

    不,Spring框架中的单例bean不是线程安全的.

  3. prometheus-存储

    采集到的样本以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘中 prometheus一般会保留15天 prometheus按照block块的方式来存储数据,每2小时为一个时间单位 ...

  4. redis主从复制与哨兵高可用

    redis主从复制 话不多说,直接看案例: 环境准备, 主从规划 主节点:6380 从节点:6381.6382 运行3个redis数据库,达到 1主 2从的配置 #主库 6379.conf port ...

  5. 学习GlusterFS(六)

    一.GlusterFS概述 分布式文件系统由来 在介绍之前我们先来看下文件系统及典型的NFS文件系统. 计算机通过文件系统管理,存储数据的.而现在数据信息时代中人们可获取数据成指数倍的增长,单纯通过增 ...

  6. "双非"应届生校招如何获得大厂青睐?(内附前端大厂面经+技术岗超全求职攻略)

    写在前面的话 笔者从17年的2月份开始准备春招,其中遇到不少坑,也意识到自己走过的弯路.故写了这篇文章总结一番,本文适合主动学习的,对自己要学的课程不明确的,对面试有恐惧症的...等将来打算从事技术岗 ...

  7. 使用Dropbox搭建静态网站详细教程

    DropBox是一款非常好用的免费网络文件同步工具,是Dropbox公司运行的在线存储服务,通过云计算实现因特网上的文件同步,用户可以存储并共享文件和文件夹.今天小z和大家分享一下如何使用dropbo ...

  8. Java JDK 动态代理实现和代码分析

    JDK 动态代理 内容 一.动态代理解析 1. 代理模式 2. 为什么要使用动态代理 3. JDK 动态代理简单结构图 4. JDK 动态代理实现步骤 5. JDK 动态代理 API 5.1 java ...

  9. Eclipse的视窗和视图概述、Eclipse工作空间的基本配置

    Eclipse的视窗和视图概述视窗  每一个基本的窗体被称为视窗 * PackageExplorer  显示项目结构,包,类,及资源 * Outline   显示类的结构,方便查找,识别,修改 * C ...

  10. 解决stram++的host代理443端口被占用的问题(电脑有虚拟机进!!)

    解决stram++的host代理443端口被占用的问题 一.steam++ 最近在用steam++这个开源且功能强大的加速器,过多就不介绍了 主页地址跳转:Steam++ - 主页 (steampp. ...