【问题标题】:Get NDB query length - using Python on Google App Engine获取 NDB 查询长度 - 在 Google App Engine 上使用 Python
【发布时间】:2023-03-08 15:26:01
【问题描述】:

在google app engine上使用NDB时,有什么好办法获取查询结果的数量?

尝试过这个:

query = NDB_Model.query(NDB_Model.some_property == some_value)
if len(query) > 0:    # <-- this throws and exception
    entity = query[0]

很抱歉,这可能是一个非常简单的问题,但我从docs 并不清楚。

【问题讨论】:

    标签: python google-app-engine app-engine-ndb


    【解决方案1】:

    您似乎只想从查询中获取第一个实体。这就是query.get() 的用途。

    query = NDB_Model.query(NDB_Model.some_property == some_value)
    
    entity = query.get()
    if entity is not None:
        # Do stuff
    

    来自文档:

    返回第一个查询结果,如果有的话(否则无)。这类似于调用 q.fetch(1) 并返回结果列表的第一项。

    在更一般的形式中,query.fetch(n) 其中n 是要获取的最大实体数。它返回一个列表,因此您可以轻松地检查len()

    【讨论】:

    • 非常感谢您的回复,当我在发布此问题后不久在文档中找到有关使用“fetch()”的部分时,我感到很愚蠢。但我仍然很高兴我问了因为会做“query.fetch(1)[0]”而不是更好的“query.get()”
    • @ChrisDutrow:没问题!当您使用q.fetch(n) 时,请务必检查长度,因为 fetch 返回最多 n 实体,但它可以返回更少。 n 只是一个限制。
    • @voithos 在使用 NDB 时,有什么好方法可以获取查询结果的数量(仅计数)?.
    • @Nijo:query.count(limit)It's right in the docs.
    【解决方案2】:

    要获取 ndb 查询的结果计数,您只需使用 count()

    query = NDB_Model.query(NDB_Model.some_property == some_value)
    if query.count() > 0:
        entity = query[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多