使用noload()删除对象

2024-04-26 10:29:45 发布

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

我有一个连接链,它绑定到我要删除的对象

差不多

JobAlertSubscriber -> JobAlertSubscriberJobs -> Jobs -> JobLikes
// etc...

为了通过db.session.delete()删除JobAlertSubscriber,ORM似乎加载了对象的所有关系

这是一个问题,因为我不想加载整个链。我还尝试使用raiseload不加载链,但在这种情况下,我无法删除任何内容,因为ORM返回给我一个InvalidRequestError(因为它无法加载要删除的对象的所有属性)

所以我找到了一个解决方案,我用一些noload()选项切断了这个链条

我的工作如下:

subscriber = JobAlertSubscriber.query.filter(JobAlertSubscriber.id == user_id)\
    .options(joinedload(JobAlertSubscriber.job_relation).joinedload(JobAlertSubscriberJob.job).noload(Job.detailed_impressions))\
    .options(joinedload(JobAlertSubscriber.job_relation).joinedload(JobAlertSubscriberJob.job).noload(Job.likes))\
    .first()

成功删除对象后:

db.session.delete(subscriber)
db.session.commit()

然而,我觉得虽然这个解决方案是可行的,但它并不是最干净的方法。你会怎么做?带有text的纯SQL调用是解决方案吗


Tags: 对象iddbsessionormjob解决方案delete