0
內聲明的基礎的我定義一個函數是這樣的:SQLAlchemy的提交更改
def update_me(self):
if self.raw_info==1: self.changed_info=10
else: self.changed_info=20
我知道這可以用hybrid_property做,但我其實可以做更復雜的操作,以上只是用於說明目的,這必須通過一種方法來完成。我如何從聲明基礎內部提交這些更改,而不傳遞會話對象?似乎合乎邏輯的是,如果我可以訪問對象並在沒有會話對象的情況下更改其值,那麼似乎我應該能夠以某種方式將它保存在此處。當然,將此代碼添加到上述功能的末尾失敗
self.commit()
我不確定是否有任何機制可以做到這一點。承諾是一項昂貴的操作,並且在所有更新完成後通常會執行一次。通常,在setter方法中調用昂貴的操作並不是一個好主意。 – drkstr1
這對我來說似乎是個壞主意,而不僅僅是因爲提交會是一個「昂貴」的操作:更重要的是,SQLAlchemy基於將業務邏輯與持久性邏輯分開的想法。任何使用你的代碼的人(包括你自己幾個月後)都需要仔細確定他們可以安全調用哪些方法,而不會過早地提交會話。 –