質問

Google App Engine で IntegerProperty が null (None) であるレコードをクエリしようとしています。これは私が成功しなかったものです:

data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)

また、クエリを使用すると、次のようになります。

query = db.Query(MyModel)
query = query.filter('intProp', None) 
data = query.fetch(limit=100)

助けていただければ幸いです。

class MyModel(db.Model):
    intProp = db.IntegerProperty()
役に立ちましたか?

解決

コードは正しいようです。実際にこんな事例はありますか? MyModelintPropNone...?

編集:OPのコメントによると、これは明らかにスキーマの移行の問題です。彼は新しいプロパティを追加し、既存のエンティティにそれが表示されることを期待しました ([なし] に設定)。それは GAE でのスキーマ変更の仕組みではありません。 ドキュメント:

App Engine DataStoreでは、すべてのエンティティが同じプロパティセットを持たせる必要はありません。モデルを更新して新しいプロパティを追加すると、既存のエンティティはこれらのプロパティなしで存在し続けます。状況によっては、これは問題ありません。これ以上の仕事をする必要はありません。いつ戻って既存のエンティティを更新して、新しいプロパティも持っていますか?1つの状況は、新しいプロパティに基づいてクエリを実行したい場合です。写真の例では、「最も人気のある」や「最も人気のない」などのクエリは、既存の写真を返しません。これを修正するには、データストアの既存のエンティティを更新する必要があります。

私が引用しているエッセイでは、その方法の 1 つを示して続けていますが、これはかなり時代遅れのアプローチで、GAE がスケジュールされたタスクやリモート API などを導入する前からのものです。今ならもっと良くできるよ。App Engine ファンは最近、 役職 これは一般的なアプローチを示しています (そして、他の人がそれを回避できるように、彼自身のスキーマ移行中に犯した間違いも含まれています)。 リモートAPI 重要なツールとして。彼はまたこう指摘する モジュール (Python の作者であり、App Engine 開発の主要な貢献者である Guido van Rossum によって開始された、Rietveld オープン ソース コアレビュー プロジェクトからのもの)タスクをきちんと適切に実行します(そのコードを少し調整する必要があります)もちろん、リートベルトの代わりにあなたのモデルを使用します)。

他のヒント

私はこのようなトリックを使用してNULL値を持つエンティティを照会するために管理します:

intProp <0

に、mymodel SELECT * FROM

当然のことながら、このようなnondocumented方法が将来のバージョンと互換性がないgarantieありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top