.get()和.fetch(1)之间的区别是什么

时间:2010-03-27 12:10:59

标签: python google-app-engine google-cloud-datastore

我编写了一个应用程序,其中一部分是使用URL解析器以ReST类型的方式获取某些数据。因此,如果您将/ foo / bar作为路径,它将找到所有条形项目,如果您输入/ foo,它将返回foo下面的所有项目

所以我的应用程序有一个像

这样的查询
data = Paths.all().filter('path =', self.request.path).get()

哪个效果很好。现在我想使用模板

将其发送到UI

{%for datum in data%}          

{{datum.title}}

    {{datum.content}}

   </div>

{%endfor%}

当我这样做时,我得到的数据不是可迭代的错误。所以我将Django更新为{% for datum in data.all %},现在看起来比我以某种方式提供更多的数据。它显示数据存储区中的所有数据都不理想。所以我从Django中删除了.all并将数据存储区查询更改为

data = Paths.all().filter('path =', self.request.path).fetch(1)

现在按照我的意图行事。在文档中说

  

db.get()函数获取一个   来自数据存储区的实体用于密钥   (或键列表)。

所以我的问题是为什么我可以在查询返回时使用fetch()但不能使用get()进行迭代。我的理解出了什么问题?

2 个答案:

答案 0 :(得分:9)

你正在查看错误的get()的文档 - 你想要get() method on the Query object。简而言之,.fetch()始终返回一个列表,而.get()返回第一个结果,如果没有结果则返回None。

答案 1 :(得分:1)

get()要求(我认为)只有一个元素,并返回它,而fetch()返回第一个 n 元素的列表,其中在这种情况下, n 恰好是1。