sqlalchemy session.close() 未关闭连接
为什么在执行了 session.close() 之后,session 还能输出用户对象呢?
__init__.py
def get_db(request):
maker = request.registry.dbmaker
session = maker()
def cleanup(request):
if request.exception is not None:
session.rollback()
else:
session.commit()
session.close()
request.add_finished_callback(cleanup)
return session
view.py
@view_config(route_name='get_path', renderer='json')
def get_path(request):
session = request.db
session.query(User).all() # outputs user objects
session.close()
session.query(User).all() # outputs user objects
我甚至尝试了 session.bind.dispose()
(应该会关闭所有连接)
1 个回答
3
当你运行 session.close()
时,它会释放它可能使用的所有资源,比如事务或连接。它并不会真正关闭会话,这样在你调用它之后,仍然可以执行其他查询...
根据 sqlalchemy 的文档:
关闭
close() 方法会执行 expunge_all(),并释放任何事务或连接资源。当连接被返回到连接池时,事务状态也会被回滚。
所以在你调用 session.close()
之后,仍然可以运行查询。任何未提交的事务,如上所述,都会被回滚。