图书管理系统

1.表设计
先考虑普通字段再考虑外键字段
数据库迁移、测试数据录入
2.首页展示
3.书籍展示
4.书籍添加
5.书籍编辑
后端如何获取用户想要编辑的数据、前端如何展示出待编辑的数据
6.书籍删除

聚合查询

聚合函数:Max Min Count Avg
在ORM中支持单独使用聚合函数 aggregate from django.db.models import Max,min,Sum,Avg
res = models.Book.objects.aggregate(Max('price'),Count('pk'),最小价格=Min('price'),allPrice=Sum('price'),平均价格=Avg('price'))
print(res)

分组查询

"""
如果执行orm分组查询报错 并且有关键字sql_mode strict mode
移除slq_mode中的only_full_group_by(配置里面的严格模式)
"""
# 分组查询
# 统计每一本书的作者个数
# res = models.Book.objects.annotate(author_num=Count('authors__pk')).values('title', 'author_num')
# print(res)
# 统计每个出版社卖的最便宜的书的价格
# res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')
# print(res)
# 统计不止一个作者的图书
# 1.先统计每本书的作者个数
# res = models.Book.objects.annotate(author_num=Count('authors__pk'))
# print(res)
# 2.筛选出作者个数大于1的数据
# res = models.Book.objects.annotate(author_num=Count('authors__pk')).filter(author_num__gt=1).values('title','author_num')
# print(res)
# 查询每个作者出的书的总价格
res = models.Author.objects.annotate(总价=Sum('book__price'),count_book=Count('book__pk')).values('name','总价','count_book')
print(res)
"""
models.表名.objects.annotate()
按照表分组
models.表名.objects.values('字段名').annotate()
按照values括号内指定的字段分组
"""
# 按出版社id查询该出版社出版了几本书
res = models.Book.objects.values('publish_id').annotate(count_pk=Count('pk')).values('publish_id', 'count_pk')
print(res)

F与Q查询

1.查询库存数大于卖出数的书籍
'''当查询条件不是明确的也需要从数据库中获取 就需要使用F查询'''
from django.db.models import F
# 1.查询库存数大于卖出数的书籍
# res = models.Book.objects.filter(kucun__gt=F('maichu'))
# print(res)
# 2.将所有书的价格涨800
# models.Book.objects.update(price=F('price')+800)
# 3.将所有书的名称后面追加爆款(添加字符串 必须要用以下两个模块)
from django.db.models.functions import Concat
from django.db.models import Value
# models.Book.objects.update(title=Concat(F('title'),Value('新款')))
# 查询主键是1或者价格大于2000的书籍
from django.db.models import Q
# res = models.Book.objects.filter(Q(pk=1), Q(price__gt=3000)) # 逗号是and关系
# print(res)
res = models.Book.objects.filter(Q(pk=2) | Q(price__gt=4000)) # |是or
# res = models.Book.objects.filter(~Q(pk=2) | Q(price__gt=4000)) # ~是not
print(res)

最新文章

  1. JavaScript对象的chapterI
  2. MySQL学习笔记——约束
  3. yii2-basic后台管理功能开发之一:引入模板
  4. paper 55:图像分割代码汇总
  5. 实现IEnumberable接口和IEnumberator
  6. (七)后台.apsx.cs获取前台客户端文本框的内容
  7. hdu 5755 2016 Multi-University Training Contest 3 Gambler Bo 高斯消元模3同余方程
  8. 序列化和反序列化(C#)
  9. iOS内存管理系列之二:自动释放与便捷方法
  10. NSTimer内存方面的探究
  11. 可等待计时器添加APC测试
  12. WordPress文章中插入qq表情
  13. ansible Templates
  14. Kivy折腾笔记
  15. XamarinSQLite教程添加测试数据
  16. django form 的内置字段类型
  17. STM32 USART 波特率计算
  18. mysqlpump:更加合理的mysql数据库逻辑备份工具
  19. EF的表左连接方法Include和Join
  20. vue相关安装命令

热门文章

  1. HFS局域网分享文件的神器(附下载链接)
  2. AgileBoot - 项目内统一的错误码设计
  3. Hudi 数据湖的插入,更新,查询,分析操作示例
  4. 生成随机数的几种方法、Math.random()随机数的生成、Random()的使用
  5. Teambition企业内部应用开发指南
  6. 齐博x1服务器性能太差,调整系统升级每次校验的文件数
  7. C# 8.0 中的 Disposable ref structs(可处置的 ref 结构)
  8. Spring Boot 中使用 Swagger
  9. PYQT5 学习
  10. NC 使用Nginx实现https的反向代理