【问题标题】:How to get the nth record of a model with Python - Django?如何使用 Python - Django 获取模型的第 n 条记录?
【发布时间】: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


    【解决方案1】:

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

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

    也是这种情况

    if records_to_delete:
       records_to_delete.delete()
    

    如果records_to_delete 为空,则不需要,因为.delete() 将什么也不做。

    【讨论】:

    • 你好,Alex:我想说我可能解释得不好:我不需要从元素数组中的特定位置删除。我真正需要的是从特定 id 向后删除,但我只收到我必须删除的元素(较旧的)的数量。
    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2017-06-18
    • 2022-12-07
    • 2010-09-30
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多