2011-05-02 45 views

回答

3

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

這和以前的答案之間的區別是,它過濾的數據存儲,而而不是在處理程序中,並且不要求您猜測將返回的實體的最大數量。

+1

你可以簡單地使用'list(Entry.gql(「WHERE amount> 0」))''。 – systempuntoout 2011-05-02 15:11:43

+1

確實很好。 – 2011-05-02 15:14:20

+0

兩者都不如在查詢中調用'.fetch(n)'效率更高,其中n是您想要的最大結果數。 – 2011-05-02 22:13:28

1

你必須做一個取()。這將給你一個條目列表。在這種情況下,my_entry = entries [4]會給你第五個對象。你試圖做的是操縱gql對象。這顯然是行不通的。試試這個

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


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

print entries[4].amount 
2

你可以使用fetch()方法上Query實例:

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


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

print entries[4].amount 
-1
entries= [entry for entry from Entry.all() if entry.amount > 0] 
print entries[4] 
+0

這將返回數據存儲的所有記錄,將不會縮放。 – 2011-05-02 20:55:40

1

如果您想引用特定指數的一個對象在結果查詢,您可以使用db.Queryfetchoffset參數:

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.