首页 > 解决方案 > 如何使用 Python - Django 获取模型的第 n 条记录?

问题描述

我目前正在处理一个命令,该命令删除一些在数据库中增长很多的模型的旧记录。背后的想法是接收一个参数,该参数指示我们必须从哪个记录号(不是 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。有了这个,我尝试获取第n 个记录,然后计算有多少记录的 id 低于给定的记录。之后,将它们全部删除。

目前这个解决方案正在运行,但我正在设法以某种方式改进它。我检查了 stackoverflow 以找到任何答案,但我只找到了解释几乎相同解决方案的旧答案:

django查询获取最后n条记录

django queryset 运行时 - 在恒定时间内获取第 n 个条目

所以,问题本身是 ¿ 有没有办法通过只获得模型的第 n 条记录来改进这个查询?

非常感谢。

标签: pythondjangodjango-orm

解决方案


您可以使用 Python 切片从第 N 个开始获取一系列项目,然后像这样删除:

WarmUpCache.objects.order_by('id')[from_which_to_delete:].delete()

也是这个条件

if records_to_delete:
   records_to_delete.delete()

不是必需的,因为如果records_to_delete为空 -.delete()什么也不做。


推荐阅读