Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取sqlalchemy中级联删除(或标记为删除)项目的id?_Python_Sql_Postgresql_Sqlalchemy_Cascading Deletes - Fatal编程技术网

Python 如何获取sqlalchemy中级联删除(或标记为删除)项目的id?

Python 如何获取sqlalchemy中级联删除(或标记为删除)项目的id?,python,sql,postgresql,sqlalchemy,cascading-deletes,Python,Sql,Postgresql,Sqlalchemy,Cascading Deletes,当我级联删除一个项目时,我希望获得所有已删除项目id(主键)的列表,包括已删除子项的id。可能吗 我的班级看起来像: class Example(Base): __tablename__ = 'example' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('example.id', ondelete='CASCADE'), nullable=True)

当我级联删除一个项目时,我希望获得所有已删除项目id(主键)的列表,包括已删除子项的id。可能吗

我的班级看起来像:

class Example(Base):
    __tablename__ = 'example'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('example.id', ondelete='CASCADE'), nullable=True)
    childrens = relationship('Example', backref=backref('parent', remote_side=[id], cascade="all, delete"))
我的疑问是:

session.query(Example).filter(Example.id == id).delete()

我所知道的唯一真正的解决方案是使用触发器。有一个通用触发器用于处理这类问题,它已作为9.2的可安装扩展提交给PostgreSQL项目(预计将在今年夏天发布)。如果您的python环境支持PostgreSQL LISTEN/NOTIFY功能,您可以下载它并将其与9.1或9.0一起使用。(我们[威斯康星州法院系统]已经在生产中使用了几个月。)恐怕在9.2版发布之前,您需要能够从源代码构建它。如果您以前没有这样做过,本页底部应该是一个良好的开端:

您可以在此处找到扩展的源代码:

。。。您目前可以在此处找到文档:

您需要创建一个触发器,该触发器在需要通知的每个表上执行此触发器函数。DML是直接的还是间接的并不重要,就像通过外键定义的ON DELETE CASCADE子句一样。虽然文档给出了一个示例,其中函数附加到所有DML,但如果需要,您可以附加它以删除,如下所示:

create trigger example_tcn_trigger
  after delete on example
  for each row execute procedure triggered_change_notification();

完全披露:我为威斯康星州法院系统写了这篇文章,他们允许我与PostgreSQL社区分享。

在Python级别没有通过sqlalchemy的解决方案?