【问题标题】:How to get a single value from gae ndb query?如何从 gae ndb 查询中获取单个值?
【发布时间】:2025-12-18 05:00:02
【问题描述】:

我正在使用带有 ndb 后端的 Google App Engine,我想从 ndb 实体获取单个值 ex:int,在任何查询之后,我都会得到带有投影的整个实体,在我的情况下,我有一个 Transactions实体,我想对金额属性求和。

我现在使用的是对查询结果的列表理解,例如:

query = ndb.gql("select amount from Transactions").fetch()
result = sum([x.amount for x in query])

有没有办法让ndb查询只返回一个金额列表,所以,我可以直接对查询结果求和:

query = ndb.gql("select amount from Transactions").fetch()
result = sum(query)

提前致谢

【问题讨论】:

  • 不可能
  • 没有比我更简单的方法吗?我的意思是,如果我有数百个该实体该怎么办??!
  • 只是上面代码中的注释query 实际上是实体列表而不是查询对象。因此,您可以将上面的内容减少到result = reduce(lambda x, y: x+y, map(lambda x: x.amount, Transactions.query().fetch( projection=[Transactions.amount,]))),尽管比下面的示例可读性要差得多。
  • 这很有帮助,非常感谢。

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


【解决方案1】:

没有直接的方法可以从投影提取中获取值列表(我想您正在寻找 django orm Transactions.query().all().values() 的 ndb 模拟),您可以执行以下操作:

result = sum([x.amount for x in Transactions.query().fetch(
    projection=[Transactions.amount,])])

https://cloud.google.com/appengine/docs/python/ndb/projectionqueries

【讨论】: