App Engine 数据存储可以查询返回完整实体还是仅返回实体键?

0 投票
2 回答
741 浏览
提问于 2025-04-16 14:46

我在阅读Google App Engine的文档时,发现这一段有点难懂。

App Engine的数据存储可以从查询中返回整个实体,或者只返回实体的键。

这是什么意思呢?这里提到的有filter(property_operator, value)fetch(limit, offset=0)

而且我相信django-nonrel在App Engine上支持values()。那这又是什么意思呢?

2 个回答

1

这段话的意思是,如果你只需要对象的键(也就是用来唯一识别这个对象的标识符),而不需要它的所有属性,那么你可以省去获取这些属性的额外开销。你可以通过使用keys_only这个参数来实现。

举个例子,

SomeModel.all(keys_only=True).fetch(10)

这段代码会返回SomeModel实体的键对象,而不是包含所有属性的完整对象。

这样可以帮助你更好地理解键和完整对象之间的区别:

http://code.google.com/appengine/docs/python/datastore/entities.html

1

你可以进行一个标准的查询,像这样:

results = MyModel.all().filter('foo =', 'bar').fetch(20)

这个查询会返回一个实体的列表(也就是 db.Model 的实例)。或者,你可以进行一个只获取键的查询,像这样:

results = MyModel.all(keys_only=True).filter('foo =', 'bar').fetch(20)

这个查询只会返回匹配实体的键(也就是 db.Key 的实例),而且执行速度比第一个查询要快。

撰写回答