关闭 SQLAlchemy ORM 会话是否会回滚未提交的更改?

2023-12-31

例如,以下两者之间有区别吗?

session = Session() # Session is a session maker
try:
    # do some work
    session.commit()
except:
    session.rollback()
finally:
    session.close()

and

session = Session()
try:
    # do some work
    session.commit()
finally:
    session.close()

后者是我以前所做的,因为我假设在提交之前关闭会话(如果发生错误)与回滚具有相同的效果。但我看到了第一个表格here http://docs.sqlalchemy.org/en/latest/orm/session_basics.html.


Closing http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#closing会话将隐式回滚当前事务状态:

The close()方法问题aexpunge_all(), and releases http://docs.sqlalchemy.org/en/latest/glossary.html#term-releases任何事务/连接资源。当连接返回到连接池时,事务状态也会回滚。

但我认为第一种形式仍然更好,因为显式优于隐式 https://www.python.org/dev/peps/pep-0020/。 SQLAlchemy 的作者也似乎反映了这种情绪 https://stackoverflow.com/a/17013336/2681632.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关闭 SQLAlchemy ORM 会话是否会回滚未提交的更改? 的相关文章

随机推荐