.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)


基础教程推荐
猜你喜欢
- 症状类型错误:无法确定关系的真值 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01