2009-02-28 44 views
22

我在Google App Engine數據存儲中爲我的db模型創建了一個新屬性。AppEngine:查詢數據存儲<missing>的值記錄

老:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 

新:

class Logo(db.Model): 
    name = db.StringProperty() 
    image = db.BlobProperty() 
    is_approved = db.BooleanProperty(default=False) 

如何查詢爲標誌的記錄,其中沒有 'is_approved' 值設置? 我試過

logos.filter("is_approved = ", None) 

但它沒有工作。 在數據查看器中,新字段值顯示爲。

回答

33

據對Queries and Indexes的App Engine文檔,還有就是有沒有爲屬性的實體之間的區別,以及那些有價值爲它;和「沒有篩選屬性的實體永遠不會被查詢返回」。因此無法爲這些舊記錄編寫查詢。

一篇有用的文章是Updating Your Model's Schema,其中說目前唯一支持的方式來查找缺少某些屬性的實體是檢查所有這些屬性。該文章提供了示例代碼,演示如何在大量實體中循環並更新它們。

+4

Google的Marzia已確認無法查詢缺失值。 – gravitation 2009-03-01 01:45:05

2

也許這已改變,但我可以根據null字段篩選記錄。

當我嘗試GQL查詢SELECT * FROM Contact WHERE demo=NULL時,它只返回缺少演示字段的記錄。

根據該文檔http://code.google.com/appengine/docs/python/datastore/gqlreference.html

一個比較的右手側可以是(適合作爲 的屬性的數據類型)以下中的一種:[...]布爾文字,爲TRUE或 錯誤;表示空值的文字( Python中的無)。

我不知道該「空」相同「失蹤」雖然:在我的情況下,這些領域已經存在在我的模型,但沒有填充的創作。也許Federico你可以讓我們知道,如果NULL查詢適用於你的具體情況?

+2

如果實體創建時它是您模型的一部分,則該字段不會丟失。它在創建時填充,即使它填充了「無」或空字符串。 – geoffspear 2011-12-22 14:06:30

相關問題