在更新了模型之后,我正在尝试级联更新:
event.listens_for(Task, "after_update")
def propagate_status(mapper, connection, target):
object = target.object
if object.is_finished():
object.status = COMPLETED
问题是,我似乎无法将对象状态描述为实际的db。我可以看出状态是设置好的,因为我有一个连接到object.status的侦听器。
我尝试过对对象调用commit(),但结果是:
ResourceClosedError: This transaction is closed
有什么更好的方法来实现这一点吗?我应该直接使用连接对象吗?
发布于 2018-01-10 15:05:58
当调用after_update
时,会话处于刷新状态。因此,您将无法对该会话提交任何更改。另一种方法是在after_update
事件处理程序中创建一个新会话。
@event.listens_for(Task, "after_update")
def propagate_status(mapper, connection, target):
obj_table = Object.__table__
object = target.object
if object.is_finished():
session = db.create_scoped_session() # or any other way
session.query(Object).filter(Object.id == target.id).update({"status": COMPLETED})
session.commit()
https://stackoverflow.com/questions/27025473
复制相似问题