django框架(07)
图书管理系统讲解
1.表设计 先考虑普通字段再考虑外键字段 数据库迁移、测试数据录入 2.首页展示 3.书籍展示 4.书籍添加 5.书籍编辑 后端如何获取用户想要编辑的数据、前端如何展示出待编辑的数据 6.书籍删除
聚合查询
聚合函数:Max Min Sum Count Avg 在ORM中支持单独使用聚合函数 aggregate from django.db.models import Max, Min, Sum, Count, Avg res = models.Book.objects.aggregate(Max('price'), Count('pk'), 最小价格=Min('price'), allPrice=Sum('price'),平均价格=Avg('price')) print(res)
分组查询
""" 如果执行orm分组查询报错 并且有关键字sql_mode strict mode 移除sql_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')) # 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括号内指定的字段分组 """ 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 # 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的书籍 # res = models.Book.objects.filter(pk=1, price__gt=2000) # 逗号默认是and关系 from django.db.models import Q # res = models.Book.objects.filter(Q(pk=1), Q(price__gt=2000)) # 逗号是and # res = models.Book.objects.filter(Q(pk=1) | Q(price__gt=2000)) # |是or res = models.Book.objects.filter(~Q(pk=1) | Q(price__gt=2000)) # ~是not print(res.query)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY