【问题标题】:Sqlalchemy Session - list of ORM instances to commitSqlalchemy Session - 要提交的 ORM 实例列表
【发布时间】:2013-06-04 11:45:54
【问题描述】:

我使用 sqlalchemy 挂钩来检查用户对某些操作的权限(例如查询或将数据插入数据库)。

为了防止保存无法访问的记录,我设置了钩子 before_commit,它获取了一个会话对象。我想获取所有实例,应该由这个提交来检查这个实例是否被保存(并删除错误的记录)。

对于添加新记录,它通过 after_attach 和 before_commit 起作用(由于某种原因,在 after_attach 内部删除不起作用)。但是如果 query->update->commit of instances after_attach 没有被调用,所以所有的权限检查都应该移到 before_commit 中。

【问题讨论】:

    标签: events session orm permissions sqlalchemy


    【解决方案1】:

    在发出before_commit 时,从会话的角度来看,一切都已“保存”;这是因为更改是专门在flush() 内发送到数据库的,而不是commit()。提交只是调用了flush(),但这并不是flush() 发生的唯一一次。

    如果你想防止某些事情发生在flush中,请使用before_flush事件:http://docs.sqlalchemy.org/en/rel_0_8/orm/events.html?highlight=before_flush#sqlalchemy.orm.events.SessionEvents.before_flush

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2016-01-14
      • 2014-04-14
      • 2019-01-20
      • 1970-01-01
      • 2013-12-05
      相关资源
      最近更新 更多