0

在声明性基础中,我定义了一个这样的函数:

def update_me(self):
   if self.raw_info==1: self.changed_info=10
   else: self.changed_info=20

我知道这可以通过 hybrid_property 来完成,但我实际上做了更复杂的操作,以上仅用于说明目的,这必须通过方法来完成。如何从声明性基础内部提交这些更改,而不将会话对象传递给它?似乎有一种方法是合乎逻辑的,如果我可以访问该对象并在没有会话对象的情况下更改其值,那么似乎我应该能够以某种方式将其保存在这里。当然,将此代码添加到上述函数的末尾会失败

self.commit()
4

1 回答 1

1

在我看来,您可能需要重新考虑您的设计。但是,如果您确定要走这条路,则可以使用以下object_session方法:

object_session(self).commit()

警告:这将提交您的整个会话(不仅仅是一个对象),并且只有在self已经附加到会话(Session.add例如,通过或已经查询它)时才会起作用。因此,这将是一个脆弱的操作,除非绝对必要,否则我不会推荐它。

但你是对的,当你说

似乎有一种方法是合乎逻辑的,如果我可以访问该对象并在没有会话对象的情况下更改其值,那么似乎我应该能够以某种方式将其保存在这里。

对象和会话已连接,因此更改将传递到数据库。我们用上面的方法得到这个连接的会话。

于 2013-09-28T03:44:36.087 回答