簡體   English   中英

AppEngine:查詢數據存儲以獲取記錄<missing>價值</missing>

[英]AppEngine: Query datastore for records with <missing> value

我在 Google App Engine 數據存儲中為我的數據庫模型創建了一個新屬性。

老的:

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)

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

logos.filter("is_approved = ", None)

但它沒有用。 在數據查看器中,新字段值顯示為。

根據關於Queries and Indexes的 App Engine 文檔,沒有屬性值的實體和具有null值的實體之間存在區別; 和“沒有過濾屬性的實體永遠不會被查詢返回。” 所以不可能為這些舊記錄編寫查詢。

一篇有用的文章是Updating Your Model's Schema ,它說當前唯一支持的查找缺少某些屬性的實體的方法是檢查所有實體。 文章中的示例代碼展示了如何循環訪問大量實體並更新它們。

一種對我們有幫助的做法是為每個 Kind 分配一個“版本”字段。 此版本在每條記錄上最初設置為 1。如果出現這樣的需要(在大型數據集中填充新字段或現有字段),版本字段允許迭代所有包含“version = 1”的記錄。 通過迭代,為新字段設置“null”或另一個初始值,將版本提高到 2,存儲記錄,允許使用默認值填充新字段或現有字段。

“版本”字段的好處是選擇過程可以在盡可能多的會話或需要盡可能多的時間之前繼續選擇較低版本號(最初設置為 1),直到所有記錄都更新為新的字段默認值。

也許這已經改變,但我能夠根據字段過濾記錄。

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

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

比較的右側可以是以下之一(適用於屬性的數據類型):[...] 布爾文字,如 TRUE 或 FALSE; NULL文字,表示空值(Python 中為 None)。

不過,我不確定“null”是否與“缺失”相同:就我而言,這些字段已經存在於我的模型中,但在創建時並未填充。 也許 Federico 您可以讓我們知道 NULL 查詢是否適用於您的特定情況?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM