python - 如何在 sqlalchemy 中触发级联删除的事件侦听器?
问题描述
我在 SQLAlchemy 中有一些模型,每当删除与该文件关联的记录时,我都需要执行一个操作(从磁盘中删除文件)。但是,将侦听器绑定到该对象的“删除”事件并不能解决问题。
例子 :
class ModelA(Base):
__tablename__ = 'modela'
id = Column(Integer, primary_key=True)
class ModelB(Base):
__tablename__ = 'modelb'
id = Column(Integer, primary_key=True)
id_modela = Column(Key, ForeignKey('modela.id', ondelete="CASCADE"), index=True, nullable=True, default=None)
modela = relationship('ModelA', backref=backref('modelbs', passive_deletes='all', lazy="dynamic"))
id_foo = Column(Key, ForeignKey('modelc.id', ondelete="SET NULL"), index=True, nullable=True)
foo = relationship('ModelC', foreign_keys='ModelB.id_foo', backref='modelbs')
class ModelC(Base):
__tablename__ = 'modelc'
id = Column(Integer, primary_key=True)
path = Column(String(256), nullable=False)
@event.listens_for(ModelB.foo, 'remove', propagate=True)
def my_listener(modela, foo, initiator):
os.remove(modela.foo.path)
modela
每当在表上发送 DELETE 查询时,永远不会调用上述侦听器。我怎样才能使 sqlalchemy 处理这种级联删除并在父表上发送删除时调用我的事件侦听器?
解决方案
推荐阅读
- elixir - 带有 Absinthe 后端的其他正确 GraphQL 查询中的未知参数
- c++ - 编译器如何操作同一行中的两个递归函数?
- keycloak - Keycloak 6.0.1 - 入门 - 保护 servlet 应用程序无法加载
- typescript - 如何在谷歌云功能中使用 geofirex
- c++ - using 语句和受保护的构造函数
- woocommerce - 尝试使用创建的新客户字段获取运输字段
- java - My AWS Rekognition sample code doesn't run
- flutter - disappear of the text written in the text field after pressing done
- android - Why can't Android release the finished activity from memory after AsyncTask finishes?
- python-3.x - Linux 上的 python 中的 openCV 在显示图像时爆炸