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

概要

モデルとプロパティのクラス、関連事項。

モデルクラスはデータストアに保存されたエンティティの構造を表します。アプリケーションはモデルクラスを定義してエンティティの構造を示し、次にモデルクラスをインスタンス化してエンティティを作成します。

モデルクラスはすべて、直接的または間接的にモデルから継承します。メタクラスを通じてモデルクラス定義の直接的な割り当てを使用すると、次のようにモデルの構造を宣言できます。

class Person(Model):
  name = StringProperty()
  age = IntegerProperty()

これで、Person エンティティを作成して、Cloud Datastore に書き込めます。

p = Person(name='Arthur Dent', age=42)
k = p.put()

put() からの戻り値はキー(ndb/key.py のドキュメントを参照)となり、後で同じエンティティを取得する際に使用できます。

p2 = k.get()
p2 == p  # Returns True

エンティティを更新するには、属性を変更し、もう一度書き込むだけです(この操作を行っても、キーは変更されません)。

p2.name = 'Arthur Philip Dent'
p2.put()

キーを使用してエンティティを削除することもできます。

k.delete()

クラス本体のプロパティ定義を通じて、Cloud Datastore に保存されるフィールドの名前と型、インデックスに登録されているかどうか、デフォルト値などがシステムに通知されます。

さまざまなプロパティ型が存在します。ほとんどはデフォルトでインデックスに登録されますが、次のリストに例外を示します。

  • StringProperty: 最大 500 バイトの短いテキスト文字列。

  • TextProperty: 無制限のテキスト文字列。インデックスに登録されません。

  • BlobProperty: 無制限のバイト文字列。インデックスに登録されません。

  • IntegerProperty: 64 ビット符号付き整数。

  • FloatProperty: 倍精度浮動小数点数。

  • BooleanProperty: ブール値。

  • DateTimeProperty: 日時のオブジェクト。App Engine では常に UTC がタイムゾーンとして使用されることに留意してください。

  • DateProperty: 日付のオブジェクト。

  • TimeProperty: 時刻のオブジェクト。

  • GeoPtProperty: 地理的な位置(緯度、経度など)。

  • KeyProperty: Cloud Datastore のキー値。任意で特定の種類の参照に限定できます。

  • UserProperty: ユーザー オブジェクト(下位互換性のためにのみ設定)。

  • StructuredProperty: エンティティのような構造のフィールド。詳細については、下記をご覧ください。

  • LocalStructuredProperty: StructuredProperty と似ていますが、ディスク上の表現は不透明な blob で、インデックスに登録されません。

  • ComputedProperty: ユーザー定義関数により他のプロパティから値が計算されるプロパティ。プロパティ値はクエリで使用できるように Cloud Datastore に書き込まれますが、エンティティを読み戻すときに Cloud Datastore の値は使用されません。

  • GenericProperty: 型の制約がないプロパティ。主に Expando クラス(下記を参照)で使用されますが、明示的にも使用することもできます。

  • JsonProperty: JSON を使用してシリアル化可能なオブジェクトを値として持つプロパティ。Cloud Datastore に書き込まれる値はそのオブジェクトの JSON 表現になります。

  • PickleProperty: Python のピクル プロトコルを使用してシリアル化可能なオブジェクトを値として持つプロパティ。Cloud Datastore に書き込まれる値は、使用可能な最も高いピクル プロトコルを使用した、そのオブジェクトのピクル化された表現になります。

ほとんどのプロパティ クラスには類似のコンストラクタ署名があります。これらには任意で複数のキーワード引数を渡します。

  • name=<string>: データストアにプロパティ値を保存する際に使用する名前。次のオプションとは異なり、これは位置引数として渡されることもあります。

  • indexed=<bool>: プロパティをインデックスに登録する必要がある(このプロパティの値に対するクエリを許可する)かどうかを示します。

  • repeated=<bool>: 同じエンティティにこのプロパティの値を複数設定できることを示します。

  • write_empty_list<bool>: 繰り返しの値のプロパティについて、要素のないプロパティ(空のリスト)をデータストアに書き込むかどうかを制御します。true の場合はデータストアに書き込まれ、false の場合は何も書き込まれません。

  • required=<bool>: このプロパティは値を指定する必要があることを示します。

  • default=<value>: 明示的な値が指定されなかった場合のデフォルト値。

  • choices=<list of values>: 許容値のリストまたはタプル。

  • validator=<function>: 汎用検証関数。2 つの引数(prop、value)を使って呼び出され、検証された値を返します。値が返されない場合は例外が発生します。また、関数が値を変更するのを許可しますが、変更された値に対してもう一度呼び出しても、値がさらに変更されることはありません(例: value.strip() や value.lower() を返す検証ツールは問題ありませんが、値 + '$' を返す検証ツールは問題があります)。

  • verbose_name=<value>: このプロパティの人間が読める名前。この人間が読める名前は html 形式のラベルに使用します。

反復オプションと必須 / デフォルト オプションは同時に指定できません。反復プロパティは必須ではなく、デフォルト値は指定できません(デフォルトは常に空のリストであり、空のリストは必ず許容値)が、必須プロパティではデフォルトを指定できます。

プロパティ型によっては追加の引数を指定します。プロパティ型によっては一部のオプションをサポートしていないものもあります。

反復プロパティは常に Python リストとして表されます。値が 1 つだけの場合、リストは 1 つだけ要素を持ちます。反復プロパティに新しいリストが割り当てられた場合、リストのすべての要素が検証されます。また、リストはインプレースに変更される可能性があるため、反復プロパティはデータストアに書き込まれる前に再検証されます。

Cloud Datastore からエンティティが読み取られる場合は検証は行われません。ただし、読み取られたプロパティ値の型が間違っている場合(IntegerProperty の値が文字列になっている場合など)、それらのプロパティ値は無視されます。

反復プロパティ以外では、None も常に値の候補になります。また、値が None に設定されている場合、検証は呼び出されません。ただし、必須プロパティについては、Cloud Datastore にエンティティを書き込むには None 以外の(有効な)値にする必要があります。

StructuredProperty では、他のほとんどのプロパティとは異なり、エンティティのサブ構造を定義できます。サブ構造自体はモデルクラスを使用して定義され、属性値はそのモデルクラスのインスタンスになります。ただし、データストアに個別のエンティティとして保存されるわけではなく、代わりに、その属性値は、所定の命名規則(構造化された属性の名前にピリオド、そしてサブ属性の名前が続く)を使用して親エンティティに含まれています。次に例を示します。

class Address(Model):
  street = StringProperty()
  city = StringProperty()

class Person(Model):
  name = StringProperty()
  address = StructuredProperty(Address)

p = Person(name='Harry Potter',
           address=Address(street='4 Privet Drive',
                           city='Little Whinging'))
k.put()

この例では、3 つの属性を持つ単一の「Person」エンティティを書き込んでいます(管理コンソールのデータストア ビューアを使用して確認できます)。

name = 'Harry Potter'
address.street = '4 Privet Drive'
address.city = 'Little Whinging'

構造化プロパティの型は任意の深さにネストできますが、ネストされた構造化プロパティの型の階層では、1 階層にしか繰り返しフラグを設定できません。複数の構造化プロパティで同じモデルクラスを参照するのは問題ありません。

また、同じモデルクラスを最上位のエンティティ クラスと構造化プロパティのモデルクラスの両方として使用することもできますが、このモデルクラスに対するクエリでは最上位のエンティティのみが返されます。

LocalStructuredProperty は Python 側の StructuredProperty と同じように動作します。次に例を示します。

class Address(Model):
  street = StringProperty()
  city = StringProperty()

class Person(Model):
  name = StringProperty()
  address = LocalStructuredProperty(Address)

p = Person(name='Harry Potter',
           address=Address(street='4 Privet Drive',
                           city='Little Whinging'))
k.put()

ただし、Cloud Datastore に書き込まれるデータは異なります。この場合、以前と同様に「name」属性を持ち、さらに(標準の「プロトコル バッファ」エンコーディングを使用して)Address 値をエンコードする blob を値とする単一の「address」属性を持つ「Person」エンティティが書き込まれます。

プロパティのセットが事前にわからない場合があります。このような場合は、Expando クラスを使用できます。これは、割り当て時と Cloud Datastore からエンティティを読み込むときの両方でオンザフライでプロパティを作成する Model サブクラスです。次に例を示します。

class SuperPerson(Expando):
  name = StringProperty()
  superpower = StringProperty()

razorgirl = SuperPerson(name='Molly Millions',
                        superpower='bionic eyes, razorblade hands',
                        rasta_name='Steppin' Razor',
                        alt_name='Sally Shears')
elastigirl = SuperPerson(name='Helen Parr',
                         superpower='stretchable body')
elastigirl.max_stretch = 30  # Meters

_properties 属性を使用して expando インスタンスのプロパティを検査できます。

>>> print razorgirl._properties.keys() ['rasta_name', 'name', 'superpower', 'alt_name'] >>> print elastigirl._properties {'max_stretch': GenericProperty('max_stretch'), 'name': StringProperty('name'), 'superpower': StringProperty('superpower')}

注: このプロパティはプレーン Model インスタンスにも存在していますが、あまり使用されていません。

モデルクラスは基本的なクエリサポートを提供します。query() クラスメソッドを呼び出してクエリ オブジェクトを作成できます。クエリ オブジェクトを反復処理すると、クエリに一致するエンティティが 1 つずつ返されます。

クエリ オブジェクトは query.py の docstring に詳しく説明されていますが、Model.query() でのみ使用可能な便利なショートカットがあります。位置引数は AND 演算子で結合されるフィルタ式として解釈されます。次に例を示します。

Person.query(Person.name == 'Harry Potter', Person.age >= 11)

これは次と同等です。

Person.query().filter(Person.name == 'Harry Potter', Person.age >= 11)

.query() に渡されたキーワード引数は、Query() コンストラクタに渡されます。

構造化プロパティのフィールド値に対してクエリを実行できます。次に例を示します。

qry = Person.query(Person.address.city == 'London')

以下のように、多数の最上位の関数もこのモジュールに存在します。

  • transaction() はトランザクション内で関数を実行します。

  • get_multi() は一度に複数のエンティティを読み込みます。

  • put_multi() は一度に複数のエンティティを書き込みます。

  • delete_multi() は一度に複数のエンティティを削除します。

これらはすべて対応する *_async() バリアントも持ちます。*_multi_async() 関数は Future のリストを返します。

最後に、以下の機能もあります(非同期バリアントなし)。

  • in_transaction() は現在トランザクションを実行しているかどうかテストします。

  • @transactional トランザクションで実行されるべき関数を修飾します。

その他の魅力的な機能も数多くあります。たとえば、Model サブクラスはほとんどの操作(get、put、delete、allocate_ids)でプリコールとポストコールのフックを定義できます。また、プロパティ クラスは多様なニーズに合わせてサブクラス化されます。プロパティ サブクラスの書き込みについてのドキュメントは、プロパティ クラスの docstring にあります。

内容

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

ベース: object

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

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

キーを構築する主な方法は、次の位置引数を使用することです。- 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>) - 下位レベルの参照オブジェクトを渡します。- Key(serialized=<string>) - シリアル化された下位レベルの参照を渡します。- Key(<dict>) - 非ピクル化用。Key(**<dict>) と同じです。

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

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

(reference、serialized、urlsafe のいずれかを使用して)参照を渡す場合、引数と名前空間のキーワードは(必要に応じてデコーディング後に)すでに参照に存在するものと一致する必要があります。親キーワードはいかなる形式の参照とも組み合わせることができません。

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

キーのコンテンツにアクセスするために、次のメソッドと操作がサポートされています。

  • repr(key)、str(key) - 最も短いコンストラクタ形式に似た文字列表現を返し、デフォルト値と同じ場合はアプリと名前空間を省略します。

  • key1 == key2, key1 != key2 - キー間が等価であることの比較。

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

  • 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()ソース

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

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

class google.appengine.ext.ndb.model.BlobKey(blob_key)ソース

ベース: object

Blobstore の blob を識別するために使用されるキー。

このオブジェクトは Blobstore API によって内部でアプリケーションの blob を識別するために使用される文字列をラップします。BlobKey は基盤となる BlobReference エンティティのエンティティ名に対応します。

このクラスは google.appengine.ext.db と google.appengine.ext.blobstore の両方で API で公開されます。

ToXml()ソース
class google.appengine.ext.ndb.model.GeoPt(lat, lon=None)ソース

ベース: object

浮動小数点型の緯度と経度の座標によって指定される地理的位置。Google マップのようなマッピング サイトと統合するためによく使用されます。ICBM 座標としても使用されます。

これは georss:point 要素です。XML 出力では、座標は lat および lon 属性として提供されます。http://georss.org/ をご覧ください。

‘<lat>,<lon>’ にシリアル化されます。無効にシリアル化された文字列が渡された場合、または lat と lon がそれぞれ [-90, 90] および [-180, 180] の範囲内にある有効な浮動小数点型ではない場合、BadValueError が発生します。

ToXml()ソース
lat = None
lon = None
exception google.appengine.ext.ndb.model.Rollbackソース

ベース: google.appengine.api.datastore_errors.Error

トランザクション関数で、commit ではなくロールバックをしようとすると発生する可能性があります。トランザクション関数で例外が発生するとロールバックが行われることに注意してください。これは手間を省くための措置です。詳細については、datastore.RunInTransaction をご覧ください。

class google.appengine.ext.ndb.model.Indexソース

ベース: google.appengine.ext.ndb.model._NotEqualMixin

インデックスを表す不変オブジェクトです。

ancestor

上位のインデックスであるかどうかに関わらず、ブール値です。

kind

インデックスに登録されている種類を示す文字列。

properties

インデックスに登録されているプロパティを提供する PropertyIndex オブジェクトのリスト。

class google.appengine.ext.ndb.model.IndexStateソース

ベース: google.appengine.ext.ndb.model._NotEqualMixin

インデックスとその状態を表す不変オブジェクト。

definition

インデックスを表すインデックス オブジェクト。

id

インデックス ID を示す整数。

state

インデックスの状態を示す文字列。

有効な値は「error」、「deleting」、「serving」、「building」です。

class google.appengine.ext.ndb.model.IndexPropertyソース

ベース: google.appengine.ext.ndb.model._NotEqualMixin

インデックス内の単一のプロパティを表す不変オブジェクト。

direction

このプロパティのインデックスの方向。「asc」または「desc」。

name

インデックスに登録されているプロパティ名を示す文字列。

class google.appengine.ext.ndb.model.ModelAdapter(default_model=None, id_resolver=None)ソース

ベース: google.appengine.datastore.datastore_rpc.AbstractAdapter

「our」キーとモデルクラスおよびプロトコル バッファとの間の変換。

これは接続オブジェクトを構築するために必要で、接続オブジェクトはコンテキスト オブジェクトを構築するために必要です。

署名の詳細については、基本クラスの docstring をご覧ください。

entity_to_pb(ent)ソース
key_to_pb(key)ソース
pb_to_entity(pb)ソース
pb_to_index(pb)ソース
pb_to_key(pb)ソース
class google.appengine.ext.ndb.model.ModelAttributeソース

ベース: object

_fix_up() メソッドの存在を示す基本クラス。

class google.appengine.ext.ndb.model.ModelKeyソース

ベース: google.appengine.ext.ndb.model.Property

Model キーを保存する特別なプロパティ。

class google.appengine.ext.ndb.model.MetaModel(name, bases, classdict)ソース

ベース: タイプ

モデルのメタクラス。

プロパティを修正する目的で用意されており、それぞれ名前を認識している必要があります。この処理を実行するには、クラスの _fix_properties() メソッドを呼び出します。

class google.appengine.ext.ndb.model.Model(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model._NotEqualMixin

Cloud Datastore エンティティを表すクラス。

通常、モデル インスタンスはエンティティと呼ばれます。モデルから継承するすべてのモデルクラスに MetaModel がメタクラスとして自動的に割り当てられ、クラスが定義された時点でクラスの後にプロパティが適切に修正されるようになっています。

このため、複数のプロパティを表すのに同じプロパティ オブジェクトを使用することはできません。プロパティごとに個別のプロパティ オブジェクトを作成する必要があります。たとえば、以下のように記述しても機能しません。

wrong_prop = StringProperty()
class Wrong(Model):
  wrong1 = wrong_prop
  wrong2 = wrong_prop

種類は通常、クラス名と同じです(ただし、モジュール名や親スコープは除きます)。種類をオーバーライドするには、次のように _get_kind() という名前のクラスメソッドを定義します。

class MyModel(Model):
  @classmethod
  def _get_kind(cls):
    return 'AnotherKind'
classmethod allocate_ids(size=None, max=None, parent=None, **ctx_options)ソース

このモデルクラスに対してキー ID を割り当てます。

パラメータ
  • size - 割り当てる ID の数。size または max のいずれかを指定できますが、両方は指定できません。

  • max - 割り当てる ID の最大数。size または max のいずれかを指定できますが、両方は指定できません。

  • parent - ID を割り当てる親キー。

  • **ctx_options - コンテキスト オプション。

戻り値

割り当てた範囲の (start, end) のタプル(両端を含みます)。

classmethod allocate_ids_async(size=None, max=None, parent=None, **ctx_options)ソース

このモデルクラスに対してキー ID を割り当てます。

Model._allocate_ids() の非同期バージョン。

classmethod get_by_id(*args, **kwds)ソース

ID によってモデルクラスのインスタンスを返します。

これは Key(cls, id, …).get() の省略形にすぎません。

パラメータ
  • id - 文字列または整数のキー ID。

  • parent - 取得するモデルの省略可能な親キー。

  • namespace - 省略可能な名前空間。

  • app - 省略可能なアプリ ID。

  • **ctx_options - コンテキスト オプション。

戻り値

モデル インスタンス、または見つからない場合は、None。

classmethod get_by_id_async(*args, **kwds)ソース

ID(およびアプリ、名前空間)によってモデルクラスのインスタンスを返します。

これは Model._get_by_id() の非同期バージョンです。

classmethod get_or_insert(*args, **kwds)ソース

トランザクション上で、既存のエンティティを取得します。存在しない場合は、新しいエンティティを作成します。

固定引数:

name: 取得または作成するキー名。

キーワード引数
  • namespace - 省略可能な名前空間。

  • app - 省略可能なアプリ ID。

  • parent - 親エンティティ キー(該当する場合)。

  • context_options - ContextOptions オブジェクト(キーワード引数ではありません)または None。

  • **kwds - 指定したキー名のインスタンスがまだ存在しない場合にモデルクラスのコンストラクタに渡すキーワード引数。指定した key_name と親を持つインスタンスがすでに存在する場合、これらの引数は破棄されます。

戻り値

指定したキー名と親を持つモデルクラスの既存のインスタンス、あるいは新しく作成されたインスタンス。

classmethod get_or_insert_async(*args, **kwds)ソース

トランザクション上で、既存のエンティティを取得します。存在しない場合は、新しいエンティティを作成します。

これは Model._get_or_insert() の非同期バージョンです。

classmethod gql(query_string, *args, **kwds)ソース

GQL クエリを実行します。

has_complete_key()ソース

このエンティティに完全なキーがあるかどうかを返します。

key

Model キーを保存する特別なプロパティ。

populate(**kwds)ソース

キーワード引数からインスタンスを入力します。

各キーワード引数は、対応するプロパティを設定するために使用されます。キーワードは有効なプロパティ名を参照する必要があります。これはモデル コンストラクタにキーワード引数を渡す場合と似ていますが、キー、ID、親のプロビジョニングは作成されません。

put(**ctx_options)ソース

このエンティティを Cloud Datastore に書き込みます。

オペレーションでキーを作成するか完成させた場合、エンティティのキー属性は新しい完全なキーに設定されます。

戻り値

エンティティのキー。常に完全なキーになります。

put_async(**ctx_options)ソース

このエンティティを Cloud Datastore に書き込みます。

これは Model._put() の非同期バージョンです。

classmethod query(*args, **kwds)ソース

このクラスのクエリ オブジェクトを作成します。

パラメータ
  • distinct - 省略可能な bool。group_by = projection の省略表現。

  • *args - 初期フィルタを適用するために使用されます。

  • **kwds - Query() コンストラクタに渡されます。

戻り値

Query オブジェクト。

to_dict(*args, **kwds)ソース

エンティティのプロパティ値を含む辞書を返します。

パラメータ
  • include - 含めるプロパティ名のセット(省略可能)。デフォルトではすべてが対象となります。

  • exclude - スキップするプロパティ名のセット(省略可能)。デフォルトでは何もスキップされません。include と exclude の両方に含まれる名前は除外されます。

class google.appengine.ext.ndb.model.Expando(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Model

動的プロパティの名前とタイプをサポートする Model サブクラス。

詳細については、モジュール docstring をご覧ください。

google.appengine.ext.ndb.model.transaction(*args, **kwds)ソース

トランザクション内でコールバックを実行します。

パラメータ
  • callback - 呼び出される関数またはタスクレット。

  • **ctx_options - トランザクション オプション。

有用なオプションは次のとおりです。

retries=N: 最大で N 回再試行します(つまり、最大で N+1 回試行します)propagation=<flag>: 既存のトランザクションの伝搬方法を決定します。

<flag> には次のいずれかを指定できます。TransactionOptions.NESTED: ネストされたトランザクションを開始します(これは

デフォルトですが、実際にネストされたトランザクションはまだ実装されていないため、事実上、既存のトランザクション外でのみ使用できます)。

TransactionOptions.MANDATORY: トランザクションはすでに処理中です。TransactionOptions.ALLOWED: トランザクションが処理中の場合、参加します。TransactionOptions.INDEPENDENT: 新しい並列トランザクションを常に開始します。

xg=True: 高レプリケーション データストア上でクロスグループ

トランザクションを有効にし、最大 5 個のエンティティ グループへの書き込みを許可します。

read_only=True: トランザクションは何も書き込みを行わないことを示します。

スループットを向上させることができる可能性があります。

警告: 伝搬フラグに NESTED 以外を使用すると、結果がおかしくなる可能性があります。ALLOWED または MANDATORY を使用したときに例外が発生する場合は、トランザクションの commit は安全ではない可能性があります。INDEPENDENT を使用する場合、読み取られた値を呼び出し元に返すのは一般に安全ではありません(呼び出し元のトランザクションで読み取られていないため)。

戻り値

callback() が返す値はすべて。

発生
  • callback() が発生させるものはすべて。datastore_errors.TransactionFailedError など。

  • トランザクションが失敗した場合。

google.appengine.ext.ndb.model.transaction_async(*args, **kwds)ソース

トランザクション内でコールバックを実行します。

これは transaction() の非同期バージョンです。

google.appengine.ext.ndb.model.in_transaction()ソース

トランザクションが現在有効になっているかを返します。

google.appengine.ext.ndb.model.transactional(_func=None, **options)ソース
google.appengine.ext.ndb.model.transactional_async(_func=None, **options)ソース
google.appengine.ext.ndb.model.transactional_tasklet(_func=None, **options)ソース
google.appengine.ext.ndb.model.non_transactional(_func=None, **options)ソース
google.appengine.ext.ndb.model.get_multi(keys, **ctx_options)ソース

一連のキーをフェッチします。

パラメータ
  • keys - 一連のキー。

  • **ctx_options - コンテキスト オプション。

戻り値

項目が Model インスタンスであるか、キーが見つからない場合は None であるリスト。

google.appengine.ext.ndb.model.get_multi_async(keys, **ctx_options)ソース

一連のキーをフェッチします。

パラメータ
  • keys - 一連のキー。

  • **ctx_options - コンテキスト オプション。

戻り値

futures のリスト。

google.appengine.ext.ndb.model.put_multi(entities, **ctx_options)ソース

一連の Model インスタンスを保存します。

パラメータ
  • entities - 一連の Model インスタンス。

  • **ctx_options - コンテキスト オプション。

戻り値

保存されたキーのリスト。

google.appengine.ext.ndb.model.put_multi_async(entities, **ctx_options)ソース

一連の Model インスタンスを保存します。

パラメータ
  • entities - 一連の Model インスタンス。

  • **ctx_options - コンテキスト オプション。

戻り値

futures のリスト。

google.appengine.ext.ndb.model.delete_multi(keys, **ctx_options)ソース

Deletes a sequence of keys.

パラメータ
  • keys - 一連のキー。

  • **ctx_options - コンテキスト オプション。

戻り値

項目がすべて None のリスト、削除されたキーごとに 1 つ。

google.appengine.ext.ndb.model.delete_multi_async(keys, **ctx_options)ソース

Deletes a sequence of keys.

パラメータ
  • keys - 一連のキー。

  • **ctx_options - コンテキスト オプション。

戻り値

futures のリスト。

google.appengine.ext.ndb.model.get_indexes(**ctx_options)ソース

設定済みのインデックスを表すデータ構造を取得します。

パラメータ

**ctx_options - コンテキスト オプション。

戻り値

Index オブジェクトのリスト。

google.appengine.ext.ndb.model.get_indexes_async(**ctx_options)ソース

設定済みのインデックスを表すデータ構造を取得します。

パラメータ

**ctx_options - コンテキスト オプション。

戻り値

Future。

google.appengine.ext.ndb.model.make_connection(config=None, default_model=None, _api_version='datastore_v3', _id_resolver=None)ソース

適切なアダプタを持つ新しい Connection オブジェクトを作成します。

必要に応じて、datastore_rpcConfiguration オブジェクトに渡すこともできます。

class google.appengine.ext.ndb.model.BlobProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値がバイト文字列のプロパティ。圧縮されていることがあります。

class google.appengine.ext.ndb.model.JsonProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.BlobProperty

値が任意の Json-encodable Python オブジェクトであるプロパティ。

class google.appengine.ext.ndb.model.StringProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.TextProperty

値が長さが制限されたテキスト文字列である、インデックスに登録されたプロパティ。

class google.appengine.ext.ndb.model.FloatProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が Python float であるプロパティ。

注: int、long、bool も許可されます。

google.appengine.ext.ndb.model.BadProjectionError

InvalidPropertyError のエイリアス

class google.appengine.ext.ndb.model.LocalStructuredProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model._StructuredGetForDictMixin, google.appengine.ext.ndb.model.BlobProperty

不透明 blob にシリアル化されたサブ構造。

これは Python 側では StructuredProperty のように表示されますが、Cloud Datastore では BlobProperty のように書き込まれています。インデックスに登録されず、サブプロパティに対してクエリを実行できません。一方、ディスク上の表現はより効率的で、gzip を使用して blob データを圧縮する compressed=True を渡すことでさらに効率化されます。

class google.appengine.ext.ndb.model.TimeProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.DateTimeProperty

値が時刻のオブジェクトであるプロパティ。

class google.appengine.ext.ndb.model.UserProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値がユーザー オブジェクトであるプロパティ。

注: これは既存の Cloud Datastore スキーマのみとの下位互換性を確保する目的で用意されています。ユーザー オブジェクトを直接 Cloud Datastore に保存せず、代わりに user.user_id() 値を保存することをおすすめします。

exception google.appengine.ext.ndb.model.InvalidPropertyErrorソース

ベース: google.appengine.api.datastore_errors.Error

プロパティが特定の使用に適切でない場合に発生します。

たとえば、プロパティが存在し、クエリの射影または GROUP BY 句で使用されるようインデックスに登録されている必要があります。

exception google.appengine.ext.ndb.model.KindErrorソース

ベース: google.appengine.api.datastore_errors.BadValueError

種類の実装が見つからない場合に発生します。

種類が 8 ビットの文字列でない場合にも発生します。

class google.appengine.ext.ndb.model.ComputedProperty(func, name=None, indexed=None, repeated=None, verbose_name=None)ソース

ベース: google.appengine.ext.ndb.model.GenericProperty

値がユーザー指定の関数によって決定される関数。

ComputedProperty は直接設定できませんが、必要に応じて関数によって生成されます。Cloud Datastore でフィールドを提供するのに便利です。これらのフィールドは、BlobProperty の長さを基準に並べ替えたり、別のフィールドが空でないかどうか確認するために等価フィルタを使用したりするなど、コードの値を手動で設定せずに、フィルタリングや並べ替えに使用できます。

ComputedProperty は正規プロパティとして宣言できます。関数を最初の引数として渡すか、計算を実行する関数のデコレータとして使用可能です。

例:

>>> class DatastoreFile(Model): ... name = StringProperty() ... name_lower = ComputedProperty(lambda self: self.name.lower()) ... ... data = BlobProperty() ... ... @ComputedProperty ... def size(self): ... return len(self.data) ... ... def _compute_hash(self): ... return hashlib.sha1(self.data).hexdigest() ... hash = ComputedProperty(_compute_hash, name='sha1')
class google.appengine.ext.ndb.model.KeyProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値がキー オブジェクトである関数。

省略可能なキーワード引数: kind=<kind>。このプロパティに割り当てられたキーは常に指定した種類である必要があります。文字列または Model サブクラスにすることもできます。

class google.appengine.ext.ndb.model.BooleanProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が Python bool のプロパティ。

class google.appengine.ext.ndb.model.PickleProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.BlobProperty

値がピクル化可能な Python オブジェクトのプロパティ。

class google.appengine.ext.ndb.model.IntegerProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が Python int または long(または bool)のプロパティ。

class google.appengine.ext.ndb.model.Property(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.ModelAttribute

Cloud Datastore エンティティの型指定された永続属性を表すクラス。

Python の「property」組み込みと混同しないでください。

これは単なる基本クラスであり、さまざまな型のプロパティを表す特定のサブクラス(および動的に型指定されるプロパティを表す GenericProperty)があります。

特殊なプロパティ属性の名前は、「public」指定されているものを含め、いずれもアンダースコアで始まります。StructuredProperty では、アンダースコア以外の属性名前空間を使用して、ネストされたプロパティ名を参照するためです。これはサブプロパティに対するクエリを指定する上で重要です(モジュール docstring を参照)。

プロパティ クラスと事前に定義されたサブクラスでは、構成可能な(積み重ね可能な)検証および変換 API を使用して簡単にサブクラス化できます。このためには、次のとおり用語を定義する必要があります。

  • 「ユーザー値」は、エンティティの標準属性を使用したアプリケーション コードによって設定、アクセスが可能な値です。

  • 「ベース値」は、Cloud Datastore に対してシリアル化が可能な値、または Cloud Datastore からシリアル化を解除することが可能な値です。

ent._values[name] に保存され、_store_value() および _retrieve_value() によってアクセスされる値はユーザー値またはベース値のいずれかになります。ユーザー値を取得するには _get_user_value() を使用します。ベース値を取得するには _get_base_value() を使用します。特に、_get_value() は _get_user_value() を呼び出し、_serialize() は実質的に _get_base_value() を呼び出します。

ユーザー値を保存するには、_store_value() を呼び出します。ベース値を保存するには、_BaseValue() に値をラップしてから _store_value() を呼び出します。

ユーザー値とシリアル化可能な値の間で特定の変換の実装を求めるプロパティ サブクラスでは、2 つのメソッドとして _to_base_type() および _from_base_type() を実装する必要があります。super() メソッドは呼び出さないでください。super の呼び出しは _call_to_base_type() および _call_from_base_type() で行います。構成可能な(積み重ね可能な)API というのは、このようなことを意味します。

API はこれまで以上に高度なユーザー <-> ベース変換によってクラスの「積み重ね」をサポートします。ユーザー -> ベース変換はより高度なものからあまり高度ではないものに変わり、ベース -> ユーザー変換はあまり高度ではないものからより高度なものに変わります。たとえば、BlobProperty、TextProperty、StringProperty の関係をご覧ください。

_to_base_type() と _from_base_type() に加え、_validate() メソッドも構成可能な API です。

検証 API は、「緩い」ユーザー値と「厳格な」ユーザー値を区別します。緩い値のセットは、厳格な値のセットのスーパーセットです。_validate() メソッドは緩い値を受け取り、必要に応じて厳格な値に変換します。つまり、プロパティ値を設定する際は、緩い値が承認されますが、プロパティ値を取得する際には、厳格な値のみが返されます。変換が不要な場合、_validate() は None を返します。承認された緩い値のセットの範囲外に引数がある場合、_validate() で例外(TypeError または datastore_errors.BadValueError)が発生します。

例 / ボイラー プレート:

def _validate(self, value):

‘Lax user value to strict user value.’ if not isinstance(value, <top type>):

raise TypeError(…) # Or datastore_errors.BadValueError(…).

def _to_base_type(self, value):

‘(Strict) user value to base value.’ if isinstance(value, <user type>):

return <base type>(value)

def _from_base_type(self, value):

‘base value to (strict) user value.’ if not isinstance(value, <base type>):

return <user type>(value)

_validate()、_to_base_type()、_from_base_type() では、次のものを処理する必要がありません。

  • None: None では呼び出されません(また、None を返す場合、値は変換の必要がないことを意味します)。

  • 繰り返し値: 繰り返し値の各リスト項目については、インフラストラクチャ(_get_user_value() および_get_base_value())が _from_base_type() または _to_base_type() を呼び出す処理を行います。

  • _BaseValue() での値のラップ: ラッピングとアンラッピングの処理は構成可能な API を呼び出すインフラストラクチャによって行われます。

  • 比較: 比較演算でオペランドの _to_base_type() が呼び出されます。

  • ユーザー値とベース値の区別: インフラストラクチャは、_from_base_type() がアンラップされたベース値で呼び出され、_to_base_type() がユーザー値で呼び出されることを保証します。

  • 元の値を返す: いずれかが None を返す場合、元の値は保持されます(None と等しくない異なる値を返す場合は、異なる値に置き換えます)。

IN(value)ソース

「in」比較演算子の比較演算子。

Python の「in」演算子は希望する方法でオーバーロードできないため、メソッドを定義します。次に例を示します。

Employee.query(Employee.rank.IN([4, 5, 6]))

メソッドは ._IN() と呼ばれますが、通常は .IN() として呼び出されることに注意してください。._IN() は、IN と呼ばれるプロパティを持つモデルで StructuredProperty を扱う場合に提供されます。

class google.appengine.ext.ndb.model.DateProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.DateTimeProperty

値がデータ オブジェクトであるプロパティ。

class google.appengine.ext.ndb.model.TextProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.BlobProperty

値が無制限の長さのテキスト文字列であるインデックスに登録されていないプロパティ

class google.appengine.ext.ndb.model.DateTimeProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が日時オブジェクトであるプロパティ。

注: Django とは異なり、auto_now_add は、エンティティを書き込む前に値を設定することによってオーバーライドできます。従来の db とは異なり、auto_now にはデフォルト値はありません。また、従来の db とは異なり、エンティティが書き込まれるとき、書き込まれた値と一致するようにプロパティ値が更新されます。最後に、これに伴ってインプロセス キャッシュの値も更新され、auto_now_add はトランザクションの再試行に異常な影響を与える可能性があるので注意してください(auto_now_add が設定されたプロパティの再試行では、最初の試行で設定された値が再利用されます)。

class google.appengine.ext.ndb.model.GenericProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が(ほとんど)任意の基本タイプであるプロパティ。

これは主に Expando と孤立値(Cloud Datastore に存在するが Model サブクラスで表されない値)に使用されますが、動的に型指定された値を持つプロパティにも明示的に使用できます。

これは str 値(Unicode は対象外)にのみ有効な compressed=True をサポートし、indexed=False を示します。

exception google.appengine.ext.ndb.model.UnprojectedPropertyErrorソース

ベース: google.appengine.api.datastore_errors.Error

射影に存在しないプロパティ値を取得するときに発生します。

class google.appengine.ext.ndb.model.StructuredProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model._StructuredGetForDictMixin

値自体がエンティティであるプロパティ。

サブエンティティの値はインデックスに登録され、クエリが実行されます。

詳細については、モジュール docstring をご覧ください。

IN(value)ソース
class google.appengine.ext.ndb.model.GeoPtProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が GeoPt であるプロパティ。

exception google.appengine.ext.ndb.model.ComputedPropertyErrorソース

ベース: google.appengine.ext.ndb.model.ReadonlyPropertyError

計算されたプロパティに値を設定しようとしたり、削除しようとするときに発生します。

class google.appengine.ext.ndb.model.BlobKeyProperty(*args, **kwds)ソース

ベース: google.appengine.ext.ndb.model.Property

値が BlobKey オブジェクトであるプロパティ。

exception google.appengine.ext.ndb.model.ReadonlyPropertyErrorソース

ベース: google.appengine.api.datastore_errors.Error

読み取り専用のプロパティ値を設定しようとするときに発生します。

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

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

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