Django:捕获完整性错误与qs.exists()哪个效率更高?

时间:2018-07-21 13:03:39

标签: django django-queryset

两种检查相同数据是否存在的方法:

1

try:
    MyModel.objects.create(
        field1=field1_value,
        field2=field1_value,
    )
except IntegrityError:
    # doing something

2

qs = MyModel.objects.filter(field1=field1_value, field2=field2_value)
if qs.exists():
    # doing something

我想知道哪种方法更可取。

1 个答案:

答案 0 :(得分:0)

Try-Except比if-else语句的效率效率低...但是由于它的多功能性和下面的要点,因此更可取 ...因此答案的确取决于您的用例...如果您尝试运行高性能实时应用程序,如果更好则更好,但是如果您正在编写通用库,那么您不知道会发生什么故障或如何发生故障。用户想要处理它,那么Try-Except更好。

您可以使用“尝试除外”块访问Finally

除了在遇到错误时不会停止代码停止之外,如果您正在处理狭窄的异常类型,这尤其可取。

您也不必像在if else语句中那样必须预测何时在代码块中发生异常。那是..

try:
    # do some things before
    MyModel.objects.create(
        field1=field1_value,
        field2=field1_value,
    )
    # do some things after
except IntegrityError:
    # catch the exception regardless of where in the Try Block the failure occured

但是,如果使用if语句,则必须预测失败点将在MyModels.objects.create()调用处,这是一个很容易避免的潜在错误。