【问题标题】:What is the difference between .get() and .fetch(1).get() 和 .fetch(1) 有什么区别
【发布时间】:2011-02-01 12:28:38
【问题描述】:

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

所以我的应用有一个类似的查询

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

效果非常好。现在我想使用模板将其发送到 UI

{% 数据中的数据 %}

{{ datum.title }}

{{ 数据. 内容 }}
   </div>

{% endfor %}

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

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

现在可以按我的预期工作。在文档中它说

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-10-22
        • 2014-07-26
        • 2017-04-12
        • 2020-01-13
        • 2014-03-31
        • 2021-06-11
        • 2017-08-18
        • 2021-05-10
        • 2014-12-23
        相关资源
        最近更新 更多