Django学习——分组查询、图书管理系统项目、wsgi, uwsgi, cgi, fastcgi
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的更多相关文章
- Linux-基础学习(四)-部署图书管理系统项目
部署图书管理项目需要以下软件 项目文件(django项目文件夹) 数据库文件(django项目对应的数据库文件) centos7(linux本体) nginx(反向代理以及静态文件收集) uWSGI( ...
- Django实现简单的图书管理系统
目录 Django写图书管理系统 功能截图 创建Django项目 开始项目 配置文件 建立路由关系 开始写Django项目 编写核心逻辑函数 写前端页面 add_author.html add_boo ...
- Django聚合分组查询、常用字段
首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...
- Django数据库查询优化-事务-图书管理系统的搭建
数据库查询优化 优化:虽然减轻了数据库的压力,但查询速度大大的减慢 ORM内所有的语句操作,默认都是惰性查询,只有你在真正的需要数据的时候才会走数据, 如果你只是写ORM语句时,是不会走数据库的,这样 ...
- Python-Flask框架之"图书管理系统"项目,附详解源代码及页面效果截图
该图书管理系统要实现的功能如下: 1. 可以通过添加窗口添加书籍或作者,如果要添加的作者和书籍已存在于书架上, 则给出相应的提示: 2. 如果要添加的作者存在,而要添加的书籍书架上没有,则将该书籍添加 ...
- Python - Django - ORM 分组查询补充
单表查询: models.py: from django.db import models class Employee(models.Model): name = models.CharField( ...
- Django学习之三:django-admin 和 项目manage.py程序
目录 Django django-admin 和 项目manage.py程序 它俩是什么? 命令程序用法 常用命令 Django django-admin 和 项目manage.py程序 它俩是什么? ...
- Django学习---多人博客项目(1)
一.创建项目和应用 在Pycharm中用Django模板创建一个工程文件 创建项目 python manage.py startproject 项目名 . 创建应用 python manage.p ...
- Group by 分组查询 实战
实战经历,由于本人在共享单车上班,我们的单车管理模块,可以根据单车号查询单车,但是单车号没有设置unique(独一无二约束),说以这就增加了单车号可能重复的风险,但是一般情况下,单车号是不会重复的,因 ...
随机推荐
- promethues常用的函数
prometheus函数常用 时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total区间数据 (Range vector): 包含一 ...
- Redis ZSet Type
Redis有序集合的操作命令和对应的api如下: zadd [zset] sco 'value' JedisAPI:public Long zadd(final String key, final d ...
- DRF 简单使用(详细注释版)
1.djangorestframework使用 下载安装 pip install djangorestframework ## djangorestframework pip install djan ...
- 顺利通过EMC试验(2)
限制值 电磁波照射,静电放电敏感性
- PCB各层的含义
阻焊层:solder mask,是指板子上要上绿油的部分:因为它是负片输出,所以实际上有solder mask的部分实际效果并不上绿油,而是镀锡,呈银白色! 助焊层:paste mask,是机器贴片时 ...
- 隐藏IE10默认在input框输入内容后显示“X”按钮
::-ms-clear{display: none;} ::-ms-reveal{display: none;}
- Nuxt.js服务端渲染实践,从开发到部署
感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ...
- python-图的字典表示
图的字典表示.输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度.比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}.用eval函数处理输入,eva ...
- Python使用函数模拟“汉诺塔”过程
运行效果: 源代码: 1 # -*- coding:utf-8 -*- 2 ##汉诺塔游戏开始 3 _times=0 #用于统计移动次数 4 def hannuota(nlist,mfrom,mpas ...
- maven jar包冲突问题
之前好端端的项目没做任何改动maven依赖就报红?jar包冲突?不要慌,问题不大. idea file里面点击invalidate Caches/Restart清空项目缓存并重启,ok解决问题.