Key クラス

注: 新しいアプリケーションを作成する際は、NDB クライアント ライブラリを使用することを強くおすすめします。NDB クライアント ライブラリには、Memcache API によるエンティティの自動キャッシュをはじめ、このクライアント ライブラリにはないメリットがあります。古い DB クライアント ライブラリを現在使用している場合は、DB から NDB への移行ガイドをお読みください。

Key クラスのインスタンスは、Datastore エンティティの一意のキーを表します。

Keygoogle.appengine.ext.db モジュールによって提供されます。

はじめに

すべてのモデル インスタンスには、識別のためのキーがあります。このキーには、インスタンスのエンティティの種類と一意の識別子が含まれています。識別子は、インスタンスの作成時にアプリケーションで明示的に割り当てたキー名の文字列か、またはインスタンスがデータストアに書き込まれた(put)時点で App Engine により自動的に割り当てられた整数の数値 ID のいずれかです。モデル インスタンスの key() メソッドは、このインスタンスに応じた Key オブジェクトを返します。インスタンスにキーが割り当てられていない場合、key() NotSavedError を生成します。

アプリケーションで get() 関数を使用すると、指定キーのモデル インスタンスを取得できます。

キー インスタンスは、Datastore エンティティ プロパティの値になります(Expando 動的プロパティや ListProperty メンバーなど)。ReferenceProperty モデルは、自動逆参照など、Key プロパティ値の機能を提供します。

コンストラクタ

class Key(encoded=None)

Datastore オブジェクトの一意のキー。

Key オブジェクトを str() に渡すと、キーを文字列に変換できます。文字列は urlsafe になります。URL で使用できる文字だけを使用します。キーの文字列表現は、Key コンストラクタ(encoded 引数)を使用すると、Key オブジェクトに戻すことができます。

注: キーの文字列表現は暗号のように見えますが、実際には暗号化されていません。未加工のキーデータ(種類と識別子)に戻すことができます。このデータをユーザーに公開しない場合(他のエンティティのキーの推測を許可しない場合)には、これらの文字列を暗号化するか、別のものを使用してください。

encoded
キーに戻す Key インスタンスの str フォーム。

クラスメソッド

Key クラスは、次のクラスメソッドを提供します。

Key.from_path(*path, parent=None, namespace=None)

任意の祖先パス(既存の Key オブジェクト)から新しい Key オブジェクトを作成します。また、1 つ以上の新しいパス コンポーネントを作成します。パス コンポーネントは、種類名(kind)と識別子(id_or_name)から構成されます。これらは、数値または文字列になります。

パスは、エンティティの親子関係を反映する階層を表します。パスのエンティティはすべてエンティティの種類で表現されます。これらは、数値 ID またはキー名になります。フルパスは、パスの最後にあり、先行するエンティティとして祖先(親)が存在するエンティティを表します。

たとえば、次の呼び出しでは、種類 Address、数値 ID 9876 のエンティティに親キー User/Boris を使用してキーを作成しています。

k = Key.from_path('User', 'Boris', 'Address', 9876)

次の方法でも同じキーを作成できます。

p1 = Key.from_path('User', 'Boris')
k = Key.from_path('Address', 9876, parent=p1)

パスの詳細については、エンティティ、プロパティ、キーをご覧ください。

引数

path
1 つ以上の祖先パス コンポーネントのリスト。各コンポーネントは、種類識別子から構成されます。
  • 種類 - エンティティの種類。文字列または Unicode 文字列で表します。
  • 識別子 - id。文字列または long 型として指定します。0 にはできません。
namespace=None
このキーにのみ設定する名前空間。名前空間を指定すると、namespace_manager で現在設定されている名前空間が上書きされます。None の場合、API は namespace_manager.get_namespace から現在の名前空間を取得します。
parent=None
親キー(省略可)。指定しない場合、デフォルトは None です。

インスタンス メソッド

キー インスタンスには次のメソッドがあります。

app()

データ エンティティを保存しているアプリケーションの名前を返します。

has_id_or_name()

エンティティが名前または数値 ID の場合、True を返します。

id()

データ エンティティの数値 ID を返します。エンティティに数値 ID がない場合には None を返します。

id_or_name()

データ エンティティの名前または数値 ID を返します。エンティティに名前も数値 ID もない場合には None を返します。

kind()

データ エンティティの種類を文字列で返します。

name()

データ エンティティの名前を返します。エンティティに名前がない場合には None を返します。

namespace()

データ エンティティの名前空間を返します。エンティティに名前空間がない場合、このメソッドは、namespace_manager に設定されている名前空間を返します。

parent()

データ エンティティの親のキーを返します。エンティティに親がない場合には None を返します。