单个对象的.Filter()与.get()?(Django)

.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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)