SQLAlchemy версия: 1.0.17
например:
class A(Model):
id = .....
b = relationship('B')
a = db.session.query(A).options(joinloaded(B)).filter(A.id==1).first()
try:
function_maybe_raise_exception()
exception:
do_sth()
if a.b:
......
когда я получаю доступ к a.b
, возникает исключение Parent instance 'A' is not bound to a Session; lazy load operation of attribute B cannot proceed
, иногда , когда function_maybe_raise_exception
повышает исключение
Но, очевидно, у меня есть joinloaded
атрибут B
, хотя объект a
находится в состоянии detached
, я могу получить доступ к a.b
в теории
Справочная информация:
session
объект scoped_session()
- мое приложение работает в многопоточности
- sqlalchemy версия как-то старая
- В производственной среде это исключение иногда возникает, когда возникает другое исключение. В моей среде тестирования я не могу воспроизвести эту проблему
Я думаю:
- Это ошибка в sqlalchemy? Потому что у меня
joinloaded
отношение
- в многопоточной среде непредсказуемое поведение
session
3.объект a
был изменён в другом потоке, приводил к этому исключению?
Мой вопрос
это исключение не должно вызываться, потому что у меня есть joinloaded
атрибут. Но иногда оно возникает в производстве.
Я что-то не так и что-то упустил?