Google App Engine: внедрение коллекции упорядоченных списков - PullRequest
2 голосов
/ 28 января 2012

Я хочу быстро внедрить простой высокоуровневый сервис в App Engine. Вот два модельных класса:

class Hiscore(db.Model):
    time = db.DateTimeProperty()
    playerName = db.StringProperty()
    score = db.IntegerProperty()

class HiscoreTable(db.Model):
    countryCode = db.StringProperty()
    scores = db.ListProperty(???)

Вопрос 1 : Как именно использовать ListProperty? Трудно найти примеры.

Вопрос 2 : Есть ли способ убедиться, что HiscoreTables упорядочены по свойству Score каждого участника? И могу ли я автоматически ограничить список, скажем, до 100 записей?

Большое спасибо,

Рувим

Ответы [ 2 ]

2 голосов
/ 28 января 2012

ListProperty - это список объектов Python, простой и понятный.Если я правильно понимаю ваш вопрос, то, что вы описываете, это список Hiscores в HiscoreTable

scores = db.ListProperty (Hiscore)

Для сортировки вы должны использовать sorted отсортировать список по баллам, прежде чем писать объект HiscoreTable.То, что он будет делать, будет эквивалентно извлечению любых объектов Hiscore, добавленных вами в список, и извлечению той же самой протравленной версии при последующих запросах.По сути это был бы список снимков предыдущих рейтинговых состояний Hiscore, а не текущего состояния.Если вы намереваетесь кэшировать результаты в течение определенного периода времени, это сработает, но вы можете вместо этого использовать memcache.

Альтернативно, , чтобы ссылаться на действительные сущности Hiscore, вы можете сделать это

scores = db.ListProperty(db.Key)

и достаньте Хискора по ключам.Опять же, вы хотели бы использовать sorted для сортировки списка перед его записью, в котором будет храниться снимок рейтинга, когда была написана таблица HiscoreTable.

Но если вам нужны абсолютно современные таблицы результатов для каждой странытогда вам придется каждый раз запрашивать модель Hiscore.

query.filter('countryCode =', somecode).order('-score').fetch(limit=100)
0 голосов
/ 28 января 2012

Есть два способа сделать это:

  1. HicoreTable содержит список Hiscore ключей:

    scores = db.ListProperty(db.Key)
    

    В этом случае вы ограничены максимальным номером индекса для объекта: 5000

  2. Каждый Hiscore имеет ссылку на HiscoreTable, которому он принадлежит:

    class Hiscore(db.Model):
        hiscoreTable = db. ReferenceProperty(HiscoreTable)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...