python - 如何使用 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 queryset 运行时 - 在恒定时间内获取第 n 个条目
所以,问题本身是 ¿ 有没有办法通过只获得模型的第 n 条记录来改进这个查询?
非常感谢。
解决方案
您可以使用 Python 切片从第 N 个开始获取一系列项目,然后像这样删除:
WarmUpCache.objects.order_by('id')[from_which_to_delete:].delete()
也是这个条件
if records_to_delete:
records_to_delete.delete()
不是必需的,因为如果records_to_delete
为空 -.delete()
什么也不做。
推荐阅读
- git - Visual Studio - 传出提交 - 禁用推送选项
- webpack - vuetify.js.map HTTP 404
- tensorflow - 我正在尝试复制 cnn 并将它们合并,以便获得双路径架构。但是出现错误。我使用的是 keras 2.1.6 版本
- c++ - WM_KEYUP 反复调用保持键
- python - 有没有更好的方法仅使用 while 循环在 python 中打印此模式?
- mysql - MySQL表,其中每个“数据”都有不同的数量信息
- java - 如何使用 Java 在 Windows 上的常见(非用户特定)文件位置附加数据文件?
- elasticsearch - 如何在使用 Java API 创建索引时使用模板
- java - SMTP 服务器无法与 Exchange 服务器通信
- javascript - 如何更改 ReactJS 挂钩中的日期格式?