在声明性基础内部,我定义了一个这样的函数:
def update_me(self):
if self.raw_info==1: self.changed_info=10
else: self.changed_info=20
我知道这可以用hybrid_property完成,但我实际上做了更复杂的操作,上面只是为了说明目的,这必须通过一个方法来完成。如何从声明性基础内部提交这些更改,而不传递会话对象?似乎合乎逻辑的是,如果我可以访问对象并在没有会话对象的情况下更改其值,那么似乎我应该能够以某种方式将其保存在这里。当然,将此代码添加到上述函数的末尾将失败
self.commit()
答案 0 :(得分:1)
在我看来,您可能想重新考虑您的设计。但是,如果您确定要采用这种方式,则可以使用object_session
方法:
object_session(self).commit()
警告:这将提交您的整个会话(而不仅仅是一个对象),只有self
已经附加到会话时才会生效(通过例如,Session.add
或查询过它。因此,这将是一个脆弱的操作,除非绝对必要,否则我不会推荐它。
但是,当你说
时,你是对的似乎合乎逻辑的是,如果我可以访问对象并在没有会话对象的情况下更改其值,那么似乎我应该能够以某种方式将其保存在这里。
对象和会话已连接,因此更改将传递到数据库。我们使用上面的方法获得此连接会话。