0
データベースからロード/保存するためにSQLAlchemy ORMを使用しています。しかし、私は、データベースからデータをロードするに呼び出される特定の機能をしたいと思い、このような何か:SQLAlchemyカスタムロード/セーブ機能(セッターとゲッター)
class MyClass(Base):
id = Column(Integer, primary_key = True)
_data = relationship('Data')
def __init__(self):
self._data = []
self.max_data = None
self.min_data = None
@property
def data(self):
return self._data
@data.setter
def data(self, data):
print('gone through setter')
self.min_data = min(data)
self.max_data = max(data)
self._data = data
はしかし、私は、DBから/ロードを保存するときにセッターとゲッターが呼ばれていないことに気づきました。これらのセッターとゲッターを呼ぶ方法はありますか?
myclass = MyClass()
myclass.data = [0,1,2,3,4,5]
# gone through setter
myclass.max_data
# 5
myclass.min_data
# 0
session.add(myclass)
session.commit()
del myclass
myclass = session.query(MyClass).all()[0]
# setter is not called here
myclass.max_data
# None
myclass.min_data
# None
min_data
とmax_data
が上の行動を添付するには(明示的にDBに保存することなく)
私は 'MyClass'クラスのインスタンスを作成するときに' getter'と 'setter'が動作すると確信しています。関係の '_data'ではなく、インスタンス属性(' _data')を取得して設定していることに注目してください。それで、戻ってきたいものを少し説明してください。 – metmirr
私の質問の末尾にいくつかの詳細を追加しました – nven
setterとgetterの使い方が不足しているので、setterの作業が表示されます: 'myclass.data = [1、2、3 4]' – metmirr