google.appengine.ext.ndb.key モジュール

概要

Key クラス、および関連するユーティリティ。

Key により、次の情報がカプセル化されます。これらの情報を組み合わせて、App Engine データストア内の(有効な)エンティティが一意に指定されます。

  • アプリケーション ID(文字列)

  • 名前空間(文字列)

  • 1 つ以上の (kind, id) ペアのリスト。kind は文字列、id は文字列または整数のいずれかです。

アプリケーション ID は常にキーの一部である必要がありますが、ほとんどのアプリケーションは独自のエンティティにのみアクセスできるため、デフォルトは現在のアプリケーション ID になり、ほとんどの場合は配慮する必要はありません。空にすることはできません。

名前空間によって、特定のアプリケーションのキースペースの最上位パーティションが指定されます。名前空間についてよく知らない場合は、この機能を無視しても問題ありません。

ほとんどのアクションには、(kind, id) ペアが指定されます。キーには、少なくとも 1 つの (kind, id) ペアが必要です。最後の (kind, id) ペアにより、キーが参照するエンティティの種類と ID が指定されます。他の要素では単に「親キー」が指定されます。

kind は、エンティティを表すために使用されるモデルクラスの名前を指定する文字列です。より古いデータベースでは、これがテーブル名になります。モデルクラスは、ndb.Model から派生した Python クラスです。ndb/model.py のドキュメントをご覧ください。クラス名自体のみが kind として使用されます。つまり、すべてのモデルクラスは、1 つのアプリケーション内で一意に命名される必要があります。これは、クラス単位でオーバーライドできます。

id は文字列または整数のいずれかです。id が文字列の場合、アプリケーションで ID の割り当て方法を制御できます。たとえば、Account エンティティの ID としてメールアドレスを使用できるかどうかなどです。

整数の id を使用するには、エンティティがデータストアに最初に挿入されたときに、エンティティの一意の ID をデータストアに選択させる必要があります。id を None に設定すると、データストアにまだ挿入されていないエンティティのキーを表すことができます。エンティティがデータストアに正常に挿入されると、最後のキー(割り当てられた ID を含む)が返されます。

最後の (kind, id) ペアの id が None に設定されているキーは不完全キーと呼ばれます。このようなキーは、エンティティをデータストアに挿入するためにのみ使用できます。

(kind, id) ペアが 1 つのみのキーは、トップレベル キーまたはルートキーと呼ばれます。トップレベル キーは、トランザクション管理で役割を果たすエンティティ グループとしても使用されます。

複数の (kind, id) ペアが存在する場合、最後のペアを除くすべてのペアは、「親エンティティ」のキーとも呼ばれる「祖先パス」を表します。

その他の制約:

  • kind と文字列の id は空ではなく、500 バイト以下の長さにする必要があります(UTF-8 エンコード後、Python の unicode オブジェクトとして指定される場合)。注: これはモジュール レベル定数 _MAX_KEYPART_BYTES として定義されます。

  • 整数の id は 1 以上 2**63 未満である必要があります。

名前空間の詳細については、http://code.google.com/appengine/docs/python/multitenancy/overview.html をご覧ください。名前空間は、名前空間マネージャによって選択された「デフォルトの名前空間」にデフォルト設定されます。明示的に空の名前空間を選択するには、namespace=’‘ を渡します。

内容

class google.appengine.ext.ndb.key.Keyソース

ベース: オブジェクト

不変のデータストア キー。

柔軟性と利便性を高めるため、複数のコンストラクタ署名がサポートされます。

キーを構築する主な方法では、次の固定引数を使用します。- Key(kind1, id1, kind2, id2, …)

これは次の 2 つの長い式の省略形です。- Key(pairs=[(kind1, id1), (kind2, id2), …]) - Key(flat=[kind1, id1, kind2, id2, …])

上のコンストラクタ フォームのいずれかが、parent=<key> を使用して別のキーに追加で渡すことができます。(kind, id) ペアが明示的に渡される前に、親キーの (kind, id) ペアが挿入されます。

次の「url-safe」でエンコードされた文字列からキーを構築することもできます。- Key(urlsafe=<string>)

秘密性を高めるために、次のコンストラクタが存在します。- Key(reference=<reference>) - 下位レベルの Reference オブジェクトに渡します。- Key(serialized=<string>) - シリアル化された下位レベルの Reference に渡します。- Key(<dict>) - 非ピクル化用。Key(**<dict>) と同じです。

「url-safe」文字列はウェブセーフな Base64 エンコードのシリアル化された Reference ですが、不透明な一意の文字列だと考えることをおすすめします。

追加コンストラクタ キーワード引数: - app=<string> - アプリケーション ID を指定します - namespace=<string> - 名前空間を指定します

Reference が渡された場合(シリアル化された、または urlsafe のリファレンスの 1 つを使用します)、引数と名前空間のキーワードはすでに Reference に存在するものに一致する必要があります(必要に応じてデコーディング後)。親キーワードはいかなる形態の Reference とも組み合わされません。

キーは不変であるため、いったん作成された Key オブジェクトは変更できません。これは Python の許可と同様、実装によって適用されます。

キーのコンテンツにアクセスするために、次のメソッドとオペレーションがサポートされます。

  • repr(key), str(key) - 最短のコンストラクタ形式に類似した文字列表現を返します。デフォルト値と異なる場合を除き、アプリと名前空間が省略されます。

  • key1 == key2, key1 != key2 - キー間の等価性を確認するための比較。

  • hash(key) - キーを dict に保存するために十分なハッシュ値。

  • key.pairs() - (kind, id) ペアのタプル。

  • key.flat() - 平坦化した kind と id の値のタプル。つまり (kind1, id1, kind2, id2, …)。

  • key.app() - アプリケーション ID。

  • key.id() - 最後の (kind, id) ペアの文字列 / 整数 ID。キーが不完全な場合は None を返します。

  • key.string_id() - 最後の (kind, id) ペアの文字列 ID。キーが整数 ID を持つ場合や、キーが不完全な場合は None を返します。

  • key.integer_id() - 最後の (kind, id) ペアの整数 ID。キーが文字列 ID を持つ場合や、キーが不完全な場合は None を返します。

  • key.namespace() - 名前空間。

  • key.kind() - key.pairs()[-1][0] のショートカット。

  • key.parent() - 最後の (kind, id) ペア以外のすべてのペアから構築されたキー。

  • key.urlsafe() - ウェブセーフの Base64 にエンコードされた、シリアル化されたリファレンス。

  • key.serialized() - シリアル化されたリファレンス。

  • key.reference() - リファレンス オブジェクト。呼び出し元は変更しないよう保証します。

キーはデータストアとのやりとりもサポートします。これらは I/O アクティビティに関与する唯一のメソッドです。Future オブジェクトについては、ndb/tasklets.py のドキュメントをご覧ください。

  • key.get() - キーのエンティティを返します。

  • key.get_async() - 最終的な結果がキーのエンティティになる Future を返します。

  • key.delete() - キーのエンティティを削除します。

  • key.delete_async() - キーのエンティティを非同期に削除します。

キーはピクル化されることがあります。

キーのサブクラス化は避けるべきですが、適切に処理することが難しい作業です。

app()ソース

アプリケーション ID を返します。

delete(**ctx_options)ソース

このキーのエンティティを同期的に削除します。

このようなエンティティが存在しない場合、操作は実行されません。

delete_async(**ctx_options)ソース

このキーのエンティティの削除をスケジュールします。

これは Future を返します。この結果は削除が完了すると利用できるようになります。このようなエンティティが存在しない場合でも Future が返されます。すべてのケースで Future の結果は None です(つまり、エンティティが存在したか否かを確認する方法はありません)。

flat()ソース

交互に kind と id の値のタプルを返します。

classmethod from_old_key(old_key)ソース
get(**ctx_options)ソース

このキーのエンティティを同期的に取得します。

このようなエンティティが存在しない場合、None を返します。

get_async(**ctx_options)ソース

結果がこのキーのエンティティである Future を返します。

このようなエンティティが存在しない場合でも Future が返され、Future が最終的に返す結果は None になります。

id()ソース

最後の (kind, id) ペアの文字列 / 整数 ID を返します(該当する場合)。

戻り値

文字列 / 整数 ID。キーが不透明な場合は、None を返します。

integer_id()ソース

最後の (kind, id) ペアの整数 ID を返します(該当する場合)。

戻り値

整数 ID を返すか、キーが文字列 ID を持つ場合や、キーが不透明な場合は、None を返します。

kind()ソース

参照されるエンティティの種類を返します。

これは、最後の (kind, id) ペアからの kind です。

namespace()ソース

名前空間を返します。

pairs()ソース

(kind, id) ペアのタプルを返します。

parent()ソース

最後の (kind, id) ペア以外のすべてのペアから構築されたキーを返します。

(kind, id) ペアが 1 つしか存在しない場合、None を返します。

reference()ソース

このキーのリファレンス オブジェクトを返します。

これは entity_pb です。Reference インスタンス - 下位レベルの API がデータストアに使用するプロトコル バッファのクラスです。

注: 呼び出し元は戻り値を変更すべきではありません。

root()ソース

ルートキーを返します。これはそれ自身か最上位の親です。

serialized()ソース

このキーのシリアル化されたリファレンス オブジェクトを返します。

string_id()ソース

最後の (kind, id) ペアの文字列 ID を返します(該当する場合)。

戻り値

文字列 ID を返すか、キーが整数 ID を持つ場合や、キーが不透明な場合は None を返します。

to_old_key()ソース
urlsafe()ソース

このキーの Reference をエンコードする URL セーフな文字列を返します。

この文字列はその他の API や言語と互換性があり、GQL および App Engine 管理コンソール内のキーを表すのに使用されます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境