Google app engine 如何编写类似SQL的SELECT x FROM的查询

Google app engine 如何编写类似SQL的SELECT x FROM的查询,google-app-engine,google-cloud-datastore,python-2.7,gql,Google App Engine,Google Cloud Datastore,Python 2.7,Gql,我想编写一个类似以下SQL查询的查询: SELECT name FROM contacts WHERE blah blah 我知道我可以做这样的事情: for contact in Contacts.gql(WHERE_CLAUSE, args).fetch(1000): print contact.name 但是,难道没有一种方法可以直接从查询中获取名称,而不必循环查询结果吗?它在性能上有什么优势吗?没有。不行 GQL查询返回零个或多个请求的实体或键 友善的每个GQL查询总是以SELE

我想编写一个类似以下SQL查询的查询:

SELECT name FROM contacts WHERE blah blah
我知道我可以做这样的事情:

for contact in Contacts.gql(WHERE_CLAUSE, args).fetch(1000):
  print contact.name
但是,难道没有一种方法可以直接从查询中获取名称,而不必循环查询结果吗?它在性能上有什么优势吗?

没有。不行

GQL查询返回零个或多个请求的实体或键 友善的每个GQL查询总是以SELECT*或SELECT开头 钥匙GQL查询无法执行类似SQL的联接查询

但是,您可以创建一个简单的包装器来完成这项工作。比如:

def get_all_of_field(model, field):
  for x in model.all():
    yield getattr(x, field)

names = get_all_of_field(Contact, 'name')

性能无法通过这种方式提高,因为无论发生什么情况,整个行都是由API读取的。您可以阅读整行,也可以只阅读其键。

现在可以使用投影查询来完成此操作。有关db,请参见此处的文档:

有关ndb,请参见此处的文档:


只能获取键或完整实体。只有获取密钥才能带来巨大的性能优势。如果您的名称是唯一的,则可以将其用作密钥。