gpt4 book ai didi

python - 为什么 Sqlalchemy Session.close 不记录 "rollback"?

转载 作者:行者123 更新时间:2023-12-05 01:48:11 26 4
gpt4 key购买 nike

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

最佳答案

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

工单: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 命名空间上设置日志记录。

关于python - 为什么 Sqlalchemy Session.close 不记录 "rollback"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17008441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com