sqlalchemy session.close()没有关闭连接

时间:2014-07-30 12:41:16

标签: python sqlalchemy

即使在执行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()(应该处置所有连接)

1 个答案:

答案 0 :(得分:1)

当您运行session.close()时,它会释放它可能使用的所有资源,即事务/连接。它不会在物理上关闭会话,因此在您调用它之后不能运行任何其他查询...

来自sqlalchemy docs

  

<强>合

     

close()方法发出expunge_all(),并释放任何事务/连接资源。当连接返回到连接池时,也会回滚事务状态。

因此,在您调用session.close()后,它仍会运行查询。如上所述,任何未提交的交易都将被回滚。