Я не уверен, как работает scoped_session, кроме того, что это оболочка, которая скрывает несколько реальных сеансов, сохраняя их отдельными для разных запросов. Это делает это с помощью локаторов потоков?Проблемы с scoped_session в sqlalchemy - как это работает?
В любом случае проблема заключается в следующем:
S = elixir.session # = scoped_session(...)
f = Foo(bar=1)
S.add(f) # ERROR, f is already attached to session (different session)
Не знаете, как F оказался в другой сессии, у меня не было проблем с этим раньше. В другом месте у меня есть код, который выглядит именно так, но на самом деле работает. Как вы можете себе представить, я нахожу это очень запутанным.
Я просто ничего не знаю здесь, f, кажется, волшебным образом добавлен в сеанс в конструкторе, но у меня нет ссылок на сеанс, который он использует. Почему это закончилось бы на другой сессии? Как я могу заставить его попасть в правильную сессию? Как эта функция scoped_session работает в любом случае? Кажется, что это работает иногда, а в других случаях просто нет.
Я определенно очень смущен.