删除可能为空的 Django QuerySet 是否安全?

Is it safe to delete a Django QuerySet that may be empty?

尝试删除可能为空的 QuerySet 是否安全?换句话说,如果我不确定名称“MJ”是否存在,这两种方法之间是否存在功能差异?哪个是首选?

1)

query = m.objects.filter(name="MJ")
if query.exists():
    query.get().delete()
m.objects.filter(name="MJ").delete()

.get() 将尝试检索一个 单个 对象,如果有 多个 个这样的对象,它将引发错误。

此外,如果只有一条记录,第一个变体将进行三个查询:首先检查是否存在 至少 一条记录,然后获取该记录,最后进行删除调用,这也可能导致删除触发器。

第二个将删除获取它将删除的对象的主键,运行删除触发器并最终删除这些对象。因此效率更高。此外,如果不存在这样的记录,或者有多个 MJname 的对象,它将删除这些对象,因此更不容易出错并且更有效。