0

NDBプロジェクションクエリがどのように機能し、キャッシングがバックグラウンドでどのように動作するかについて、いくつか疑問があります。

したがって、次のようなモデルが与えられます。

class Users(ndb.Model):
    user_name = ndb.StringProperty(required=True)
    user_email = ndb.StringProperty(required=True)
    user_password = ndb.StringProperty(required=True)

    @classmethod # THIS ONE DOES NOT WORK
    def get_profile_info(cls, id):
        return ndb.Key(Users, id).get(projection=[Users.user_name])

    @classmethod # THIS ONE WORKS
    def get_profile_info(cls, id):
        return Users.query(Users.key == ndb.Key(Users, id)).get(projection=[Users.user_name])

最初のクラスメソッドで「TypeError:Unknown configuration option('projection')」が発生するのはなぜですか?キーを照会する代わりに、キーの直接取得でプロジェクションを呼び出すことはできませんか?

次に、キャッシングに関して、このスレッドを正しく理解したかどうかはわかりません。投影されたクエリを使用する場合のNDBキャッシング

投影されたクエリはキャッシュされていませんか?これは、投影するのではなく、単にget()を呼び出して(そしてインスタンス全体をフェッチして)キャッシュされるようにする方が良いという意味ですか?

前もって感謝します!

4

1 に答える 1

2

エラーによると、getを使用する場合、射影は意味がありません。ドキュメントから「プロジェクション内のこれらのプロパティの値のみを取得します。クエリインデックスからこのデータを取得します(したがって、プロジェクション内のプロパティにインデックスを付ける必要があります)」。したがって、getを実行しても、インデックスを介してオブジェクトのプロパティにアクセスすることはありません。参照されている質問のキャッシュに関するgvrのコメントに注意してください。

于 2012-09-09T13:22:20.143 に答える