为什么Sqlalchemy Session.close没有记录“回滚”?

时间:2013-06-09 09:55:26

标签: python session sqlalchemy

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

时看到日志“回滚”

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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