Как написать запрос как SQL SELECT x FROM - PullRequest
0 голосов
/ 30 декабря 2011

Я хочу написать запрос, который выполняет что-то вроде этого запроса SQL:

SELECT name FROM contacts WHERE blah blah

Я знаю, что могу сделать что-то вроде этого:

for contact in Contacts.gql(WHERE_CLAUSE, args).fetch(1000):
  print contact.name

, но там нетспособ получить name непосредственно из запроса без необходимости зацикливаться на результатах?это обеспечит какое-либо преимущество в производительности?

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Неа.Не может быть сделано.

Запрос GQL возвращает ноль или более сущностей или ключей запрошенного вида.Каждый GQL-запрос всегда начинается с SELECT * или SELECT key .(Запрос 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, несмотря ни на что.Либо вы читаете всю «строку», либо только ее ключ.

0 голосов
/ 19 октября 2012

Вы можете сделать это сейчас, используя проекционные запросы.Для дБ, см. Документацию здесь:

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

Для ndb см. Документацию здесь:

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

...