GQL SELECT Сортировка - PullRequest
1 голос
/ 20 марта 2012

Есть ли более простой способ выбрать и отсортировать по весу ?

fetchCount = 1000
date1 = datetime.datetime.utcnow().date() 
entries = GqlQuery("SELECT * FROM Entry WHERE category = :category and date >= :datetime ORDER BY date, weight DESC", category = category, datetime = date1).fetch(fetchCount)

if entries is not None:
    # Sort entries ( lazy way for now ).
    sort = True
    while sort:
        sort = False
        for i in range(0, len(entries)-1):
            if entries[i].weight < entries[i + 1].weight:
                e = entries[i + 1]
                entries[i + 1] = entries[i]
                entries[i] = e
                sort = True

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

решено:

entries = GqlQuery("SELECT * FROM Entry WHERE category = :category and date > :datetime ORDER BY date, weight DESC", category = category, datetime = date1).fetch(fetchCount)
entries = sorted(entries, key=lambda x: x.weight, reverse=True)

так как другого пути нет, атм ....

1 голос
/ 21 марта 2012

Это ограничение хранилища данных, если вы используете фильтр неравенства (например, date> =: datetime), который также должен быть вашим первым ключом заказа.Кроме того, вы можете иметь неравенства только для одного свойства на запрос.Таким образом, в вашем случае у вас нет выбора, кроме как сортировать их в памяти.Вызов sorted () в другом ответе идеален.

...