私はFlaskでSQLAlchemy拡張を使用しています。私のモデル(データベース操作にも使用されています)をシリアル化しているうちに、 jsonpickleを使用して、いくつかの特定の属性を無視します。私はそれらのルールを設定する方法がありますか?jsonpickleでシリアル化の特定のフィールドを除外する方法は?
SQLAlchemyは、_sa_instance_state
という名前の属性をオブジェクトに追加します。言い換えれば、私はこのフィールドをJSON出力にしたくありません。
私はFlaskでSQLAlchemy拡張を使用しています。私のモデル(データベース操作にも使用されています)をシリアル化しているうちに、 jsonpickleを使用して、いくつかの特定の属性を無視します。私はそれらのルールを設定する方法がありますか?jsonpickleでシリアル化の特定のフィールドを除外する方法は?
SQLAlchemyは、_sa_instance_state
という名前の属性をオブジェクトに追加します。言い換えれば、私はこのフィールドをJSON出力にしたくありません。
デフォルトのクラスピックラーに何かを無視するように指示することはできません。
はpickle
module__getstate__
と__setstate__
メソッドをサポートしていません。あなたのクラスがこれらの2つのメソッドを実装している場合は、返されるものはすべてによって代わりに使用されます。両方の方法を実装する必要があります。
__getstate__
がは独自のバージョンは単に_sa_instance_state
キーを削除し、作業が完了し、その同じ辞書を使用する必要があるのでが、代わりに__dict__
属性を使用して、実装されていない場合:
__getstate__
戻り
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
再帰的に処理されるため、そこでサブオブジェクトを処理することを心配する必要はありません。
__getstate__
と__setstate__
を追加することはできません。クラスにcustom serialization handlerを登録することもできます。欠点は、__getstate__
は辞書を返すだけでなくなりますが、カスタムハンドラは完全に平坦化された値を返す必要があることです。
'__getstate__'と' __setstate__'を追加するのは今のところ魅力的です。ありがとうございます。モデルごとに同じコード行を書くのではなく、 '__dict__'から無視されたフィールドを削除するデコレータを実装することは、将来的には良いアイデアかもしれません。 – mkubilayk
mkubilaykが将来の機能を望んでいるのは、.NETのxmlシリアル化の[XmlAttributes.XmlIgnore Property](https://msdn.microsoft.com/en-us/library/system.xml.serialization)と非常によく似ています。 .xmlattributes.xmlignore(v = vs.110).aspx) – jxramos