如何编写SQL SELECT x FROM之类的查询

时间:2011-12-29 20:35:22

标签: 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

但是没有办法直接从查询中获取name而不必循环结果?它会在性能上提供任何优势吗?

2 个答案:

答案 0 :(得分:2)

不。无法完成。

  

GQL查询返回零个或多个实体或请求的密钥   类。每个GQL查询始终以SELECT *或SELECT开头   的即可。 (GQL查询无法执行类似SQL的“连接”查询。)

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

但您可以创建一个简单的包装器来为您完成。类似的东西:

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

names = get_all_of_field(Contact, 'name')

无论如何都无法改进性能,因为无论如何,API都会读取整个“行”。要么你阅读整个“行”或只是它的键。

答案 1 :(得分:0)

您现在可以使用投影查询执行此操作。对于db,请参阅此处的文档:

https://developers.google.com/appengine/docs/python/datastore/projectionqueries

对于ndb,请参阅此处的文档:

https://developers.google.com/appengine/docs/python/ndb/queries#projection