3

更新: さらにテストした結果、この問題はエンティティ グループ内のすべての子エンティティに影響するようです。これらすべての異なるインスタンスのルートの親は、組み込みのユーザーの種類ではなく、私自身が作成したユーザーの種類です。子 Kind のコンストラクターから parent=user を削除すると、get_by_key_name が期待どおりに機能します。ただし、可能であれば、定義済みのキーと共にエンティティ グループ機能を使用できるようにしたいと考えています。

-- こんにちは、GAE プロジェクトでクエリを高速化するために、定義済みのキー名を使用しようとしています。

ただし、キーを取得できないという奇妙な問題に遭遇しました。このコードは機能していないようです:

for l in Logins.all().fetch():
    print Login.get_by_key_name(l.key().name())

いくつかのメモ:

  • SDKでのみテストしました
  • l.key().name() データ ストアを参照すると、エンティティと共にリストされたキー名の文字列を返します。データ ストーリーから文字列をコピー アンド ペーストし、それを get_by_key_name() の引数として使用できますが、それも機能しません。

  • ログインの種類のキー名はすべて "l" (つまり小文字の "L") で始まり、それ以外はすべて小文字で、アンダースコアまたはダッシュを含むことができますが、500 バイト未満です。

  • この作品のような他の種類のサーチェ。

  • 重要なのは、Login の種類の 2 つのプロパティの補間であり、通常の .filter() メソッドを使用してオブジェクトをうまく取得できます。
  • インスタンスの「親」は User クラスです。(これが私が取得しなければならない方法に何らかの関係がある場合に言及する)

だから私は尋ねなければなりません、これがうまくいかない明らかな理由はありますか? SDK を使用したキー名検索に関する既知の問題はありますか?

4

1 に答える 1

3

あなたの2番目のコメントは正しいです、AFAIK。親子関係は、ファイル システムのディレクトリまたはフォルダー構造に似ています。あなたの鍵は(概念的に)/parents/[parent_keyname]/logins/[login_keyname]です。したがって、取得しようとして/logins/[login_keyname]も、エンティティを取得できません。Login(すべての s が s の子でなければならないという規則はありませParentん。`get_by_key_name() は毎回親関係を通知する必要があります。)

私自身のコードでは、自分でキーを作成することになりましたKey.from_path()。私はクラス メソッドを使用Login.key_for_name(some_parent, some_name)Login.get_by_key_name_for_parent(some_parent, some_name)ています。

于 2010-02-02T03:30:02.587 に答える