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

Aut*_*ter 7 python google-app-engine google-cloud-datastore

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

所以我的应用程序有一个查询

data = Paths.all().filter('path =', self.request.path).get()
Run Code Online (Sandbox Code Playgroud)

哪个效果很好.现在我想使用模板将其发送到UI

{%for datum in data%}

{{datum.title}}

{{datum.content}}

   </div>
Run Code Online (Sandbox Code Playgroud)

{%endfor%}

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

data = Paths.all().filter('path =', self.request.path).fetch(1)
Run Code Online (Sandbox Code Playgroud)

现在按照我的意图运作.在文档中说

db.get()函数从数据存储区中获取Key(或Keys列表)的实体.

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

Nic*_*son 9

你正在查看错误的get()的文档 - 你想在Query对象上使用get()方法.简而言之,.fetch()始终返回一个列表,而.get()返回第一个结果,如果没有结果则返回None.