在更新之前调用SQLAlchemy,而不是在

2024-05-14 18:48:55 发布

您现在位置:Python中文网/ 问答频道 /正文

谁知道我做错了什么吗

我有注册事件的方法(更新前,删除后,插入前) https://github.com/ITCase/sqlalchemy_mptt/blob/b0efead7a8ee5acc063b68ee3bfc756af4689d6e/sqlalchemy_mptt/mixins.py#L69

@classmethod
def register_tree(cls):
    event.listen(cls, "before_insert", cls.mptt_before_insert)
    event.listen(cls, "after_delete", cls.mptt_after_delete)
    event.listen(cls, "before_update", cls.mptt_before_update)

当我注册事件并尝试删除行(https://github.com/ITCase/sqlalchemy_mptt/blob/b0efead7a8ee5acc063b68ee3bfc756af4689d6e/sqlalchemy_mptt/tests.py#L104)时。在

^{pr2}$

在更新方法之前调用,而不是在删除后调用。但是,如果我在更新事件(https://github.com/ITCase/sqlalchemy_mptt/blob/b0efead7a8ee5acc063b68ee3bfc756af4689d6e/sqlalchemy_mptt/mixins.py#L72)之前进行注释,就可以了。在

@classmethod
def register_tree(cls):
    event.listen(cls, "before_insert", cls.mptt_before_insert)
    event.listen(cls, "after_delete", cls.mptt_after_delete)
    # event.listen(cls, "before_update", cls.mptt_before_update) <-- IF comment this, called after_delete method. It's OK.

生成状态https://travis-ci.org/ITCase/sqlalchemy_mptt/builds/23428309

怎么了?在


Tags: httpsgithubcomeventsqlalchemy事件updatedelete
1条回答
网友
1楼 · 发布于 2024-05-14 18:48:55

在那里求解https://groups.google.com/forum/#!msg/sqlalchemy/gdwuMjNfrPc/v2ChQjGjWwoJ

结果是,当删除带有子节点的节点时,sqlalchemy默认情况下首先更新子节点(设置parent_id=None),然后删除节点。当我设置cascade=“all,delete”时,它是逐个删除节点(不带更新)。在

相关问题 更多 >

    热门问题