单个对象的.Filter()与.get()?(Django) [英] .filter() vs .get() for single object? (Django)

查看:30
本文介绍了单个对象的.Filter()与.get()?(Django)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和一些同事就这一点进行了辩论。当您只需要一种方式时,是否有首选的方式在Django中检索对象?

两种显而易见的方式是:

try:
    obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
    # We have no object! Do something...
    pass

和:

objs = MyModel.objects.filter(id=1)

if len(objs) == 1:
    obj = objs[0]
else:
    # We have no object! Do something...
    pass

第一种方法在行为上似乎更正确,但在控制流中使用异常,这可能会引入一些开销。第二个更迂回,但永远不会引发异常。

您认为哪一个更可取?哪个更有效率?

推荐答案

get()提供specifically for this case。使用它。

选项2几乎就是get()方法在Django中的实际实现方式,因此应该没有"性能"差异(您正在考虑它的事实表明您违反了编程的基本规则之一,即试图在编写和分析代码之前对其进行优化--直到您有了代码并可以运行它,您才知道它将如何运行,而在此之前尝试优化是一条痛苦的道路)。

这篇关于单个对象的.Filter()与.get()?(Django)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆