0
# 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()

根据 SQLAlchemy 文档:

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()”时看到日志“回滚”

4

1 回答 1

4

池中发生的回滚(或如果已配置,则提交)当前未参与引擎通常为提交/回滚事件所做的日志记录。

票:http://www.sqlalchemy.org/trac/ticket/2752已添加。

编辑:看看这个,我认为这个日志记录应该仍然是池记录器的一部分,而不是引擎的,否则你会得到很多这样的:

sqlalchemy.Engine: COMMIT
sqlalchemy.Engine: ROLLBACK (via pool)

应用程序真的不必太担心池的回滚,因为如果你使用 a Session,你真的应该在任何操作之前调用commit()or 。rollback()close()

池日志记录通常由create_engine("url", echo_pool='debug')或在命名空间上设置日志记录打开sqlalchemy.pool

于 2013-06-09T19:30:04.843 回答