.filter() vs .get() for single object? (Django)(单个对象的.Filter()与.get()?(Django))
本文介绍了单个对象的.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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:单个对象的.Filter()与.get()?(Django)


基础教程推荐
猜你喜欢
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 包装空间模型 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01