SQLAlchemy提交更改

时间:2013-09-26 02:01:35

标签: python sqlalchemy

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

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

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

self.commit()

1 个答案:

答案 0 :(得分:1)

在我看来,您可能想重新考虑您的设计。但是,如果您确定要采用这种方式,则可以使用object_session方法:

object_session(self).commit()

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

但是,当你说

时,你是对的
  

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

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