Flask で SQLAlchemy 拡張機能を使用しています。jsonpickle を使用してモデル(データベース操作にも使用される)をシリアル化する際に、いくつかの特定の属性を無視したいと考えています。これらのルールを設定できる方法はありますか?
SQLAlchemy は、名前付きの属性_sa_instance_state
をオブジェクトに追加します。つまり、このフィールドを JSON 出力に含めたくありません。
Flask で SQLAlchemy 拡張機能を使用しています。jsonpickle を使用してモデル(データベース操作にも使用される)をシリアル化する際に、いくつかの特定の属性を無視したいと考えています。これらのルールを設定できる方法はありますか?
SQLAlchemy は、名前付きの属性_sa_instance_state
をオブジェクトに追加します。つまり、このフィールドを JSON 出力に含めたくありません。
デフォルトのクラス pickler に何かを無視するように指示することはできません。
jsonpickle
pickle
モジュール __getstate__
と__setstate__
メソッドをサポートします。クラスがこれら 2 つのメソッドを実装している場合、返されたものはすべてjsonpickle
状態を表すために使用されます。どちらの方法も実装する必要があります。
が実装されていない場合__getstate__
は、代わりに属性を使用するため、独自のバージョンで同じ辞書を使用するだけでよく、キーを削除すれば完了です。jsonpickle
__dict__
_sa_instance_state
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
戻り値が何であれ__getstate__
、再帰的にさらに処理されるため、そこでのサブオブジェクトの処理について心配する必要はありません。
__getstate__
andを追加できない場合は、クラスのカスタム シリアライゼーション ハンドラ__setstate__
を登録することもできます。欠点は、辞書を返すだけで済む一方で、カスタム ハンドラーは完全に平坦化された値を返す必要があることです。__getstate__