# I've set echo=True when doing create_engine, so I can see all the sql stmt
# DBSession is ScopeSession(thread_local) and autocommit is False
session = DBSession()
session.add(somemodel)
#
try:
session.flush()
raise Exception()
session.commit()
except SQLAlchemyError as e:
session.rollback()
finally:
session.close()
acording к SQLAlchemy документы:Почему Sqlalchemy Session.close не регистрирует «откат»?
The close() method issues a expunge_all(), and releases any transactional/connection
resources. When connections are returned to the connection pool, transactional state is
rolled back as well.
Я ожидаю увидеть журнал "откат" при выполнении "session.close()"
Почему? Транзакции не совершаются, если вы явно не указываете базе данных на фиксацию. Закрытие соединения с базой данных или запуск новой транзакции таким образом неявно откатываются назад. –
транзакция также неявно начинается, но я вижу журнал «begin» – Tallmad
Я говорю о уровне базы данных, а не уровне SQLAlchemy. SQLAlchemy начинает транзакцию явно там, заканчивая любые предыдущие транзакции. –