注: 新しいアプリケーションを作成する際は、NDB クライアント ライブラリを使用することを強くおすすめします。NDB クライアント ライブラリには、Memcache API によるエンティティの自動キャッシュをはじめ、このクライアント ライブラリにはないメリットがあります。古い DB クライアント ライブラリを現在使用している場合は、DB から NDB への移行ガイドをお読みください。
Expando クラスは、プロパティが動的に決定されるデータモデル定義のスーパークラスです。Expando モデルでは、Model と同様の固定プロパティと実行時にエンティティに割り当てられる動的プロパティの組み合わせを使用できます。
Expando
は google.appengine.ext.db
モジュールによって提供されます。
Expando は Model のサブクラスであり、Model クラスのクラスメソッドとインスタンス メソッドを継承します。Expando クラスが定義またはオーバーライドするメソッドはありません。
はじめに
Expando モデルでは、固定プロパティと動的プロパティを使用できます。固定プロパティは Model のプロパティと同様に動作し、クラス属性を使用して Expando モデルクラス内に同様に定義されます。動的プロパティは、インスタンスでプロパティに値を割り当てると作成されます。同じ Expando クラスの 2 つのインスタンスで、異なる動的プロパティのセットを使用することができます。また、同じ名前で型が異なる動的プロパティを使用することもできます。動的プロパティは常にオプションであるため、デフォルト値はありません。つまり、値を割り当てるまでは存在しません。
動的プロパティでは、Property インスタンスを使用した検証、デフォルト値の設定、値に対する自動ロジックの適用を行うことはできません。動的プロパティは、サポートされているデータストアの型の値を格納するだけです。詳細については、型とプロパティ クラスをご覧ください。
また、固定プロパティとは異なり、動的プロパティではクラス属性名とデータストアのプロパティ名を異なる名前にすることはできません。詳細については、使用できないプロパティ名をご覧ください。
ヒント: Property クラスを使用して動的プロパティの値を検証したい場合、Property クラスをインスタンス化し、そのインスタンスの validate() メソッドを動的プロパティの値に対して呼び出すという方法があります。
Expando サブクラスでは、Model クラスと同じように固定プロパティを定義できます。Expando の固定プロパティは Model のプロパティと同様に動作します。Expando インスタンスでは固定プロパティと動的プロパティの両方を使用できます。
import datetime from google.appengine.ext import db class Song(db.Expando): title = db.StringProperty() crazy = Song(title='Crazy like a diamond', author='Lucy Sky', publish_date='yesterday', rating=5.0) hoboken = Song(title='The man from Hoboken', author=['Anthony', 'Lou'], publish_date=datetime.datetime(1977, 5, 3)) crazy.last_minute_note=db.Text('Get a train to the station.')
Expando インスタンスの動的(固定でない)プロパティは削除できます。動的プロパティを削除するには、アプリケーションでインスタンスの属性を削除します。
del crazy.last_minute_note
コンストラクタ
Expando クラスのコンストラクタは次のように定義されます。
- class Expando(parent=None, key_name=None, **kwds)
-
使用する前にクラスでプロパティを定義する必要がないモデルクラス。Model と同様に、Expando クラスはサブクラス化してデータ エンティティの種類を定義する必要があります。
Expando は Model のサブクラスであり、Model クラスのメソッドを継承またはオーバーライドします。
引数
- parent
- 新しいエンティティの親エンティティの Model インスタンスまたは Key インスタンス。
- key_name
-
新しいエンティティの名前。この名前は主キーの一部となります。
None
の場合、システムが生成した ID がキーとして使用されます。key_name の値を数字で始めることはできません。また、
__*__
の形式にすることもできません。アプリケーションでユーザーが送信したデータ(メールアドレスなど)をデータストアのエンティティ キー名として使用する場合、これらの要件を満たすために、最初にデータの前に既知の文字列(「key:」など)を追加するなどして値をサニタイズする必要があります。key_name
は、str
の値を ASCII テキストに変換した Unicode 文字列として保存されます。 - **kwds
- キーワード引数として使用するインスタンスのプロパティの初期値。それぞれの名前は新しいインスタンスの属性に対応するものであり、Expando クラスで定義された固定プロパティまたは動的プロパティのいずれかに相当します。