Запрос механизма приложений извлекает данные с помощью индекса - PullRequest
2 голосов
/ 02 мая 2011

class Entry(Base):
    amount = db.IntegerProperty()


entries = Entry.gql("WHERE amount > 0")

Есть ли способ ссылаться на результат записи с индексом в виде массива, например

my_entry = entries[4]

Ответы [ 5 ]

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

entries = [x for x in Entry.gql("WHERE amount > 0")]

Различие между этим и предыдущими ответами состоит в том, что он фильтрует данные в хранилище данных, а не в обработчике, и не требует угадывания максимального количества объектов, которые будут возвращены.

2 голосов
/ 02 мая 2011

Вы можете использовать метод fetch () в экземпляре Query:

class Entry(Base):
    amount = db.IntegerProperty()


entries = Entry.gql("WHERE amount > 0").fetch(5)

print entries[4].amount
1 голос
/ 02 мая 2011

Если вы хотите сослаться на один объект определенного индекса в вашем результате запроса, вы можете использовать fetch метод db.Query с параметром offset:

entry = Entry.gql("WHERE amount > 0").fetch(1, offset=4)[0]
print entry.amount

Однако, если выхотите сослаться на несколько объектов из результатов запроса, fetch их всех и индексировать как обычный массив Python:

entries = Entry.gql("WHERE amount > 0").fetch(1000)
print entries[4].amount
print entries[5].amount
print entries[7].amount
# etc.
1 голос
/ 02 мая 2011

Вы должны сделать выборку (). который даст вам список записей. В этом случае my_entry = records [4] даст вам пятый объект. То, что вы пытались сделать, это манипулировать объектом gql. Что, очевидно, не сработает. Попробуйте это

class Entry(Base):
    amount = db.IntegerProperty()


entries = Entry.gql("WHERE amount > 0").fetch(1000)

print entries[4].amount
0 голосов
/ 02 мая 2011
entries= [entry for entry from Entry.all() if entry.amount > 0]
print entries[4]
...