【发布时间】:2021-07-26 12:27:57
【问题描述】:
我目前正在处理一个命令,该命令会删除一些在数据库中增长很多的模型的旧记录。背后的想法是接收一个参数,该参数指示我们必须从哪个记录号(不是 id)向后删除。为此,我想出了这个解决方案:
reference_record = WarmUpCache.objects.filter(company_id=company).values_list('id', flat=True).order_by('-id')[_number_of_records]
records_to_delete = WarmUpCache.objects.filter(company_id=company,id__lt=reference_record)
if records_to_delete:
records_to_delete.delete()
例如,对于给定的 company_id=118,我获取与该公司关联的记录的 ID。有了这个,我尝试获取 nTh 记录,然后计算有多少记录的 id 低于给定的记录。之后,将它们全部删除。
目前此解决方案正在运行,但我正在设法以某种方式对其进行改进。我检查了 stackoverflow 以找到任何答案,但我只找到解释几乎相同解决方案的旧答案:
django query get last n records
django queryset runtime - get nth entry in constant time
所以,问题本身是 ¿ 有没有办法通过仅获取模型的第 n 条记录来改进此查询?
非常感谢。
【问题讨论】:
标签: python django django-orm