Google App Engine - Търсене на stringProperty в python

Аз съм нов Google App Engine, така че следвах урока HelloWorld и Книгата за гости за Python като начало.

Сега бих искал да направя запитване за конкретен низ в моя клас, но не мога да намеря подходящия документ в документацията на GAE.

Имам следното:

class song_key(genre)
    #We use genre as the key for a Song entity
    return ndb.Key('Repository',genre)

class Singer(ndb.Model):
    name = ndb.StringProperty()
    birthday = ndb.DateProperty()

class Song(ndb.Model):
    author = ndb.StructuredProperty(Singer)
    title = ndb.StringProperty()
    release = ndb.DateProperty()
    dateAdd = ndb.DateTimeProperty(auto_now_add=True)

Бих искал да намеря всички песни, чийто автор == „Джон Ленън“, като приемем, че всички принадлежат към един и същ „жанр“

Опитах някои неща като:

q = Song.query((Song.author.name == "John Lennon'), ancestor=song_key(genre)).order(-Song.data)
results = q.all()

Но това очевидно не е начинът да направите това запитване.

Може ли някой да ми помогне да разбера заявките в Google App Engine? Какъв е добрият начин за постигане на такава stringProperty заявка?

Преминах през https://cloud.google.com/appengine/docs/python/ndb/queries или https://cloud.google.com/appengine/docs/python/datastore/queryclass, но имам някакъв проблем с разбирането на цялата концепция ^^

РЕДАКТИРАНЕ: Ето резултата от две заявки:

Query(kind='Song', ancestor=Key('Repository', 'Pop'), orders=...)

[Song(key=Key('Repository', 'Pop', 'Song', 5733953138851840), author=Singer(name=u'John Lennon'), date=datetime.datetime(2016, 2, 13, 22, 59, 31, 766373),title=u'Come Together'), Song(key=Key('Repository', 'Pop', 'Song', 5556931766779904), author=Singer(name=u'Bruno Mars'), date=datetime.datetime(2016, 2, 13, 16, 15, 58, 584174), title=u'Uptown Funk), Song(key=Key('Repository', 'Pop', 'Song', 6119881720201216), author=Singer(name=u'Katty Perry'), date=datetime.datetime(2016, 2, 13, 16, 15, 30, 915749), title=u'Teenage Dream')]

Имам три записа.

И когато искам да филтрирам по име на автор:

Query(kind='Song', ancestor=Key('Repository', 'Pop'), filters=FilterNode('author.name', '=', 'John Lennon'), orders=...)

[]

Празен списък!

Благодаря ти !


person Bikemat    schedule 13.02.2016    source източник
comment
Защо това явно не е начинът? И защо сте направили свойствата на певеца indexed=False, ако искате да ги запитате?   -  person Daniel Roseman    schedule 14.02.2016
comment
и какво трябва да прави класът song_key(). Това е донякъде странно   -  person Tim Hoffman    schedule 14.02.2016
comment
Започнах от урока за книгата за гости cloud.google.com/appengine/docs/python/ Gettingstartedpython27/, но сте напълно прав. Направих свойствата на певеца индексирани :) song_key() е жанрът на музикален обект. Подобно на guestbook_key в урока за книгата за гости, аз използвам ключа за песен, за да събера всички мои записи за песни в различни жанрови категории. Добавям и резултат от моята заявка.   -  person Bikemat    schedule 14.02.2016


Отговори (1)


Добре, намерих питоничен начин да реша проблема си: правя запитване за ВСИЧКИ песни в определен жанр, след което проверявам дали певецът, който търся, принадлежи към този списък.

q = Song(ancestor=repository_key(genre))
results = p.fetch()

songs = []
for result in results:
    if author in result.author.name:
        songs.append(result)
person Bikemat    schedule 15.02.2016