Родительский экземпляр не связан с сеансом; ленивая загрузка учетной записи атрибута не может продолжаться
При попытке выполнить следующую операцию:
for line in blines:
line.account = get_customer(line.AccountCode)
Я получаю сообщение об ошибке при попытке присвоить значение line.account
:
DetachedInstanceError: Parent instance <SunLedgerA at 0x16eda4d0> is not bound to a Session; lazy load operation of attribute 'account' cannot proceed
Я что-то делаю неправильно?
Ответы
Ответ 1
"отсоединенный" означает, что вы имеете дело с объектом ORM, который не связан с Session
. Session
является шлюзом для реляционной базы данных, поэтому в любое время, когда вы ссылаетесь на атрибуты на сопоставленном объекте, ORM иногда необходимо вернуться в базу данных, чтобы получить текущее значение этого атрибута. В общем, вы должны работать только с "прикрепленными" объектами - "отключенный" - это временное состояние, используемое для кеширования и для перемещения объектов между сеансами.
См. Quickie Intro to Object States, а затем, вероятно, прочитайте и остальную часть этого документа;).
Ответ 2
У меня была такая же проблема с сельдереем. Добавление lazy='subquery'
к отношениям разрешило мою проблему.
Ответ 3
Я столкнулся с этим типом DetachedInstanceError
, когда я преждевременно закрываю сеанс запроса (то есть, имея код для работы с объектами модели SQLAlchemy ПОСЛЕ закрытия сессии). Таким образом, чтобы один ключ дважды не закрывал сеанс, пока вам не понадобится взаимодействовать с объектами модели, I.E. некоторые атрибуты модели Lazy Loaded и т.д.