使用scoped_session在事务内调取commit方法报sqlalchemy.exc.ResourceClosedError: This transaction is closed
时间: 2024-03-15 17:45:48 浏览: 209
This resource should be closed.
`scoped_session` 通常用于管理会话的生命周期,它会为每个线程创建一个会话,并在线程结束时自动关闭会话。但是,如果你在使用 `scoped_session` 时手动控制事务,可能会遇到这个问题。
这个错误通常是由于在事务关闭后尝试使用连接或事务引起的。在使用 `scoped_session` 进行数据库操作时,需要注意在适当的时候提交事务,否则会引起这个错误。你可以尝试在事务内调用 `commit` 方法,如下所示:
```python
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import create_engine
engine = create_engine('mysql://user:password@localhost/db_name')
Session = scoped_session(sessionmaker(bind=engine))
session = Session()
try:
# 在事务内进行数据库操作
session.add(...)
session.commit()
except:
session.rollback()
raise
finally:
# 在事务结束后关闭会话
session.close()
```
在这个例子中,我们手动控制了事务,确保在事务结束时调用了 `commit` 方法,并在 `finally` 块中关闭了会话。
阅读全文