По соображениям производительности наше приложение загружает определенные экземпляры модели SQLAlchemy в память во время запуска.Ожидается, что эти экземпляры не изменятся в течение срока службы приложения, поэтому это разумное решение.
По большей части это было нормально, но я наблюдал отдельные случаи, когда появится DetachedInstanceError: Instance <ZZZ at 0x3a23510> is not bound to a Session; attribute refresh operation cannot proceed
, вызывая текущие проблемы.Это та же самая ошибка, которую я (как и ожидалось) получал бы при попытке доступа к отношениям с отложенной загрузкой для аналогично кэшированного объекта.
Эта ошибка, по-видимому, вызвана доступом к атрибуту .id, который я ожидаюне требовать какого-либо обновления БД для доступа.Что меня действительно беспокоит, так это то, что я не могу последовательно воспроизвести это исключение.
Мой вопрос заключается в том, что может вызвать это исключение и какие методы кто-либо использовал для хранения экземпляров SQLAlchemy за пределами транзакции, которая их привела?