23

Google App Engine データストアに自分の db モデルの新しいプロパティを作成しました。

年:

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」値が設定されていない Logo レコードを照会する方法は? 私は試した

logos.filter("is_approved = ", None)

しかし、うまくいきませんでした。データ ビューアでは、新しいフィールド値が として表示されます。

4

3 に答える 3

36

クエリとインデックスに関する App Engine のドキュメントによると、プロパティの値を持たないエンティティとnull値を持つエンティティは区別されます。および「フィルター処理されたプロパティのないエンティティは、クエリによって返されることはありません。」したがって、これらの古いレコードに対するクエリを作成することはできません。

有用な記事はUpdating Your Model's Schemaで、現在サポートされている唯一の方法は、一部のプロパティが欠落しているエンティティを見つけることであり、それらすべてを調べることです。この記事には、エンティティの大規模なセットを循環して更新する方法を示すサンプル コードがあります。

于 2009-03-01T00:26:57.657 に答える
0

これは変更されたのかもしれませんが、 nullフィールドに基づいてレコードをフィルター処理できます。

GQL クエリSELECT * FROM Contact WHERE demo=NULLを実行すると、デモ フィールドが欠落しているレコードのみが返されます。

ドキュメントhttp://code.google.com/appengine/docs/python/datastore/gqlreference.htmlによると:

比較の右辺は、次のいずれかになります (プロパティのデータ型に応じて): [...] TRUE または FALSE としてのブール値リテラル。null 値を表す NULL リテラル (Python では None )

ただし、 「null」が「欠落」と同じかどうかはわかりません。私の場合、これらのフィールドはモデルに既に存在していましたが、作成時に入力されていませんでした。Federico さん、あなたの特定のケースで NULL クエリが機能するかどうか教えていただけないでしょうか?

于 2011-12-22T05:49:05.687 に答える