2011-05-10 51 views
1

通過給定實體ID,我將通過models = Model.get_by_id(id)進行查詢。但是,我發現有些時候它不會收集結果。Google App Engine:替代方法get_by_id()

是否有任何替代或推薦的方法通過Google App Engine中的實體ID進行查詢,python?

+0

你是什麼意思與「有些時候它不會返回正確的結果」? – systempuntoout 2011-05-10 06:43:33

+0

通過運行models = Model.get_by_id(id),有時它不會返回任何內容,有時它完美地工作,「id」是一個常量整數。 – Peter 2011-05-10 07:02:34

+0

[Google應用引擎:get_by_id不可靠?]可能的重複(http://stackoverflow.com/questions/5169917/google-app-engine-get-by-id-not-reliable) – geoffspear 2011-05-10 13:17:06

回答

1

該問題在2011-05-10(v1.5發佈日期)之後自行消失。不知道這個問題是相關的。

我沒有更改任何代碼,因爲get_by_id()在這幾天裏一直很好。除此之外,我添加了一個cron作業來每隔幾分鐘運行一次get_by_id(),並嘗試讓實例處於活動狀態。

從我的觀察,get_by_id()失敗,因爲它無法查詢數據存儲。

順便說一句,數據存儲的設置是主/從複製。

0

get_by_id()如果傳遞的對象是對象的有效標識並且對象存在於數據存儲中,則始終獲取對象。

ID可以通過object.key.id在templat

別人來給你總是有object.get(key).

3

如果Model.get_by_id(id)回報None,這表明你已經提供了無效的ID,而不是方法本身是靠不住的。

在系統停機的情況下,這種方法可能會失敗,但如果確實如此,您的調用會拋出數據存儲異常,而不會返回空的結果。

+0

是的,問題是get_by_id(),而是傳遞無效密鑰或不正確處理異常。 – 2011-05-10 14:11:18

5

如果你正在用父級保存你的類實例,那麼get_by_id將不會返回該對象,而是將返回None,原因是該鍵沒有完成,因此也需要父鍵。我遇到了同樣的問題,並且很難找出屁股。

ico = Icons.get_by_id("3", parent = parentkey) 

這將返回一個對象。 ;-)