python - sqlalchemy "after_update"事件后级联更新

标签 python sqlalchemy flask-sqlalchemy

我正在尝试在模型更新后级联更新:

event.listens_for(Task, "after_update")
def propagate_status(mapper, connection, target):
    object = target.object
    if object.is_finished():
        object.status = COMPLETED

问题是我似乎无法将对象状态提交给实际数据库。我可以看出状态确实已设置,因为我有一个附加到 object.status 的监听器。

我尝试在对象上调用 commit() 但结果是:

ResourceClosedError: This transaction is closed

有没有更好的方法来实现这一点?我应该直接使用连接对象吗?

最佳答案

对于那些后来发现这个的人。我能够直接成功使用连接:

@event.listens_for(Task, "after_update")
def propagate_status(mapper, connection, target):
    obj_table = Object.__table__
    object = target.object
    if object.is_finished():
        connection.execute(
                scan_table.update().
                where(object_table.c.id == object.id).
                values(status=COMPLETED)
            )

如果有更优雅的方式,我完全支持。

关于python - sqlalchemy "after_update"事件后级联更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27025473/

相关文章:

python - Pandas 的差异但用户定义的函数

python - Beautifulsoup `<br>` 来自输入的标签处理

python - 为什么发电机不能 pickle ?

python - SQLAlchemy,同一张表上的一对一关系

python - SQLAlchemy session 的正确用法

python - 如何删除模型中的默认值并添加 alembic 版本?

python - Sqlalchemy : InvalidRequestError: Object '<User at 0x3a970d0>' is already attached to session '2' (this is '3' )

python - Databricks/ADF python 帮助

python - SQLAlchemy 在同一事务中删除和插入

python - SQLAlchemy 模型中的流程字段(使用 flask_sqlalchemy)