помочь с запросом хранилища данных - PullRequest
2 голосов
/ 15 мая 2011

Привет. Я пытаюсь перечислить плейлисты, которые содержат песни данного исполнителя, для которого у меня есть ключевое слово, мои модели:

**playlist**
songs = db.ListProperty(db.Key)

**Song**
artist = db.ReferenceProperty(Artist,collection_name='songs')

**Artist**
Key Name = john-lennon

, поэтому плейлист содержит список клавиш песен, а песня содержит ссылку на исполнителя.

любая помощь будет принята с благодарностью. Мои запросы всегда были простыми, поэтому я немного растерялся: -)

1 Ответ

3 голосов
/ 15 мая 2011

Вы не можете делать подобные запросы с помощью GAE. Хранилище данных не является реляционной базой данных и не выполняет такие функции, как JOIN.

Лучшее, что вы можете сделать, - это получить все песни, исполнителем которых является Джон Леннон, а затем найти список воспроизведения для этих песен:

songs = GqlQuery('SELECT __key__ FROM song WHERE artist = :1', 'john-lennon')
playlists = GqlQuery('SELECT * FROM playlist WHERE songs IN :1', songs)

Обратите внимание, что даже у этого будут проблемы, если у вас более 30 песен Джона Леннона - как сказано в документации:

Примечание. Операторы IN и! = Используют несколько запросов за сценой. Например, оператор IN выполняет отдельный базовый запрос хранилища данных для каждого элемента в списке. Возвращенные объекты являются результатом перекрестного продукта всех базовых запросов к хранилищу данных и дедуплицируются. Для каждого отдельного запроса GQL допускается не более 30 запросов к хранилищу данных.

...