Django高级查询:一对多与多对多操作及分组聚合实例
37 浏览量
更新于2024-08-29
收藏 72KB PDF 举报
在Django中,数据操作和查询是开发过程中必不可少的部分,特别是在涉及到多表关联时。本文将详细介绍Django中的分组聚合查询,包括一对多和多对多关系的增删改操作,以及基于对象和双下划线的查询方式。
1. **多表查询与增删改**
- 一对多关系:在创建对象时,通常采用"先一后多"的方式,例如,创建`Publish`对象后,通过外键关联到`Book`模型。外键可以绑定对象本身或依赖表的主键,如`publish = Publish.objects.create()`,然后通过`Book.objects.create(publish=publish)`或者`publish_id=publish.id`来添加书籍。
- 删除操作:Django默认支持级联删除,当删除一个关联对象时,其子对象也会随之删除,除非有特定的保护设置。
- 修改操作:改变一个`Book`对象的外键时,由于外键的存在,必须确保关联的对象已经存在。对于多对多关系,可以通过`.add()`方法添加作者对象,`clear()`或`remove()`方法删除作者,或使用`set([作者对象们|主键们])`替换所有作者。
2. **查询操作**
- 基于对象的查询:可以直接访问对象的属性,如`book.publish.first().name`。反向查询则通过类名小写加上下划线,如`publish.book_set.first().name`。
- 基于双下划线的查询语法:利用`values()`函数获取特定字段的结果,如`Book.objects.filter(id=1).values('publish__name')[0]`,或查询特定关系字段,如`publish.values('book__name')`。
3. **分组查询与聚合函数**
- Django提供了一系列聚合函数,如`Max`, `Min`, `Sum`, `Avg`, `Count`,用于查询结果的汇总统计。例如,单独聚合整个表可以使用`aggregate(Max(price))`,分组聚合则需配合`group_by()`,如`Book.objects.group_by(publish).annotate(high_price=Max(price))`。
- 聚合查询的使用场景包括:单独查询时不分组,只得到单一聚合结果;在分组情况下,根据指定字段进行分组,并获取分组字段和聚合结果。
4. **聚合函数的应用**
- 在Django ORM中,聚合函数的语法是`aggregate(别名=聚合函数('字段'))`。可以同时对多个字段进行聚合处理,比如`aggregate(total_price=Sum('price'), count_books=Count('id'))`。
总结来说,Django的强大之处在于其灵活的查询机制,特别是针对多对多和一对多关系的处理,以及对聚合函数的直观应用。熟练掌握这些技巧有助于开发者更高效地管理数据库操作和数据分析。
756 浏览量
494 浏览量
374 浏览量
374 浏览量
494 浏览量
300 浏览量
294 浏览量
110 浏览量
890 浏览量
weixin_38698590
- 粉丝: 6
- 资源: 943
最新资源
- webwork2guide.pdf
- 身份认证技术分析(论文)
- birt报表参数使用
- 高质量的c++c编程指南
- Flex 3 Cookbook
- BCM5228 10/100BASE-TX/FX Transceiver
- ActionScript 3.0 Cookbook 中文版
- The International Reference Alphabet
- 你必须知道的495个C语言问题(内含完整章节,PDF格式)
- SQL Server 使用方法
- 清华大学信号与系统课件
- lingoziliao
- Advanced 3D Game Programming With Directx 9.0.pdf
- C程序设计 谭浩强 清华大学出版社
- eclipse插件开发指南
- javaeye月刊2008年6月 总第4期.pdf