2009-02-28 14 views
22

Google App Engine Datastoreでデータベースモデルの新しいプロパティを作成しました。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) 

しかし、動作しませんでした。 データビューアでは、新しいフィールド値がで表示されます。 Queries and Indexes上のApp Engineのドキュメントによると、プロパティの値を持たない事業体、およびそのためのヌル価値を有するものとの区別は

答えて

33

があります。 「フィルタされたプロパティのないエンティティはクエリによって返されません」したがって、これらの古いレコードのクエリを記述することはできません。

有用な記事はUpdating Your Model's Schemaです。これは現在サポートされているエンティティがいくつかのプロパティを見つけられない方法は、すべてを調べることだけだと言います。この記事には、大量のエンティティを循環させて更新する方法を示すサンプルコードがあります。

+4

GoogleのMarziaは、欠損値を照会する方法がないことを確認しました。 – gravitation

2

これは変更されている可能性がありますが、nullフィールドに基づいてレコードをフィルタリングすることができます。

私はGQLクエリSELECT * FROM Contact WHERE demo=NULLを試すと、デモフィールドがないレコードのみを返します。

DOC http://code.google.com/appengine/docs/python/datastore/gqlreference.htmlによれば:

比較の右側には、(プロパティのデータ型の 応じて)次のいずれかとすることができる:[...]リテラルブール、 TRUEまたは FALSEとします。 NULLリテラル。ヌル値を表します( のPythonにはありません)。

私は「ヌル」と同じであることはよく分からない「行方不明」かかわら:私の場合には、これらのフィールドは、すでに私のモデルに存在していたが、作成時に読み込まれませんでした。たぶんフェデリコあなたは、NULLクエリがあなたの特定のケースで動作するかどうか私たちに知らせることができますか?

+2

エンティティの作成時にモデルの一部であった場合、このフィールドは欠落していませんでした。また、「なし」または空文字列が入力されていても、作成時にデータが格納されました。 – geoffspear

+1

ヌルはヌル、!=不足しています。実際には、データストアとインデックスの両方にスペースが必要です。 – ZiglioUK

関連する問題