删除可能为空的 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()
将尝试检索一个 单个 对象,如果有 多个 个这样的对象,它将引发错误。
此外,如果只有一条记录,第一个变体将进行三个查询:首先检查是否存在 至少 一条记录,然后获取该记录,最后进行删除调用,这也可能导致删除触发器。
第二个将删除获取它将删除的对象的主键,运行删除触发器并最终删除这些对象。因此效率更高。此外,如果不存在这样的记录,或者有多个 MJ
为 name
的对象,它将删除这些对象,因此更不容易出错并且更有效。
尝试删除可能为空的 QuerySet 是否安全?换句话说,如果我不确定名称“MJ”是否存在,这两种方法之间是否存在功能差异?哪个是首选?
1)
query = m.objects.filter(name="MJ")
if query.exists():
query.get().delete()
m.objects.filter(name="MJ").delete()
是。 .get()
将尝试检索一个 单个 对象,如果有 多个 个这样的对象,它将引发错误。
此外,如果只有一条记录,第一个变体将进行三个查询:首先检查是否存在 至少 一条记录,然后获取该记录,最后进行删除调用,这也可能导致删除触发器。
第二个将删除获取它将删除的对象的主键,运行删除触发器并最终删除这些对象。因此效率更高。此外,如果不存在这样的记录,或者有多个 MJ
为 name
的对象,它将删除这些对象,因此更不容易出错并且更有效。