У меня есть цепочка объединений, связанная с объектом, который я хотел бы удалить.
Что-то вроде
JobAlertSubscriber -> JobAlertSubscriberJobs -> Jobs -> JobLikes
// etc...
Чтобы удалить JobAlertSubscriber
через db.session.delete()
, кажется, что 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()
Однако я чувствую, что, хотя это решение работает, это не самый чистый способ продолжить.Чтобы ты делал?Является ли чисто SQL-вызов с text
решением?