如何通过Django模型对象获取去重的指定列数据?
Django模型高效获取去重name字段值的方法
直接利用Django ORM的数据库层面去重能力,比Python循环处理高效得多,推荐两种实现方式:
通用兼容方案(支持所有数据库)
使用values_list()配合distinct(),让数据库直接返回去重后的name值:
unique_names = list(MyMenu.objects.values_list('name', flat=True).distinct())
values_list('name', flat=True):指定只获取name字段的值,且返回单个值的迭代器而非元组distinct():在数据库层面执行去重操作,避免把全量数据拉取到Python中再处理
最终得到的unique_names就是你需要的["hiro","fusa","yoshi","yoshio"]格式。
针对PostgreSQL的优化方案(Django 2.0+)
如果你的项目使用PostgreSQL,可以通过指定字段的distinct()进一步精准控制:
unique_names = list(MyMenu.objects.order_by('name').distinct('name').values_list('name', flat=True))
注意:这种方式要求先对name字段排序,且仅PostgreSQL支持按指定字段去重。
优势说明
这两种方法都是让数据库完成去重逻辑,数据库在处理这类操作时有成熟的优化机制,相比Python循环遍历去重,能大幅减少内存占用和处理时间,数据量越大优势越明显。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

