2012-01-17 100 views
0

我有我的數據存儲實體ID:查詢使用谷歌應用程序引擎車型

In [38]: i1 
Out[38]: <my_app.models.Infospot at 0x4255a90> 

In [39]: i1.key().id() 
Out[39]: 162L 

但我不能查詢基於其ID:

In [41]: Infospot.get_by_id(162L) is None 
Out[41]: True 

In [45]: Infospot.get(Key.from_path('Infospot', 162L)) is None 
Out[45]: True 

我在做什麼錯?

+1

在第一段代碼中,您正在進行基於模型的操作,即使實體未實際存儲在數據存儲中,該操作也可以返回結果。在第二段代碼中,您基本上正在運行查詢來檢查數據存儲以獲取保存的條目。它返回None。因此在數據存儲中找不到具有此類型和ID的條目。難道你忘記在查詢之前放置對象嗎?它 – 2012-01-17 20:37:55

回答

4

看起來您的Infospot實體可能是一個子實體。一個實體由它的種類,ID和它的所有父母來唯一標識,所以試圖把它作爲一個根實體取回是行不通的。

您可以通過打印出i1.key()的值來驗證是否屬於這種情況;如果它看起來像datastore_types.Key.from_path(u'Something', 123L, 'Infospot', 162L),則表明該實體是種類爲Something的實體的孩子。

+0

賓果! 'i1.key()'=>'datastore_types.Key.from_path(u'Something',126001L,u'SomethingElse',113L,u'Infospot',162L,_app = u's〜foo-bar')' – 2012-01-18 10:48:41