2012-04-09 11 views
1

NDBクエリを実行していますが、これは部分的なオブジェクトのみを取得しているようです。モデルの場合は、キャッシュされている場合はオフにしました。しかし、データストアビューアに埋め込まれていることがわかると、多くのプロパティがNoneで返されます。NDBクエリがフルオブジェクトを返さない

これはローカル開発サーバー(および展開済み)であり、クエリはバックエンドプロセスによって実行されています。

注:memcacheをクリアしても問題が解決しませんでした。

注:バックエンドを再起動させると、正しいデータがプルダウンされます。基本的には

バックエンドが

フロントエンドは、バックエンドがするまで、インスタンスの元のバージョンを確認し続けて

モデルのインスタンスへの変化を引き起こすモデルのインスタンスごとにX秒を照会を開始再起動

バックエンドのコードは非常に単純です:

while 1: 
    time.sleep(2) 
    q = None 
    res = None 
    q = core.Agent.query() 
    res = q.fetch(10) 
    for a in res: 
     logging.error("%s" % a.to_dict()) 

フロントエンドは一部のプロパティを変更します(ビューアに表示されます)が、バックエンドには古い値しか表示されません。また、正しい値に基づいてフィルタがフィルタリングされるようですが、fetch()は古いものを返します。

+0

フロントエンドが既存のエンティティのプロパティを変更していて、新しいエンティティを作成していないことは確かですか? (誤って新しいエンティティを作成した場合、新しい値が表示される理由は説明できますが、プログラムでは古い値が見えています)エンティティを編集するコードを表示することはできますか? –

+0

データストアビューアで変更されたエンティティのみが表示されます(私のテストでは2つのエンティティのみ) –

+0

タスクを使用する方が適切ではないでしょうかキュー?バックエンドで変更をポーリングするのではなく、エンティティが変更されたときにフロントエンドからタスクを挿入できます。 –

答えて

1

ループの上部にあるコンテキストキャッシュをクリアする必要があります。

while 1: 
    ndb.get_context().clear_cache() 
    <rest of your code> 
関連する問題