即使在执行session.close()之后,会话如何能够输出用户对象?
__初始化__ 的.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()
(应该处置所有连接)
答案 0 :(得分:1)
当您运行session.close()
时,它会释放它可能使用的所有资源,即事务/连接。它不会在物理上关闭会话,因此在您调用它之后不能运行任何其他查询...
<强>合强>
close()方法发出expunge_all(),并释放任何事务/连接资源。当连接返回到连接池时,也会回滚事务状态。
因此,在您调用session.close()
后,它仍会运行查询。如上所述,任何未提交的交易都将被回滚。