1

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

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

对于添加新记录,它通过 after_attach 和 before_commit 起作用(由于某种原因,在 after_attach 内部删除不起作用)。但是在查询->更新->提交实例的情况下 after_attach 没有调用,所以所有权限检查都应该移到 before_commit 中。

4

1 回答 1

3

在发出时间时before_commit,从会话的角度来看,一切都被“保存”了;这是因为更改是在.flush()而不是commit(). 提交只是调用,flush()但这不是唯一一次flush()发生。

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

于 2013-06-09T20:30:01.497 回答