############################################################################### # scoped_session # The scoped_session object by default uses threading.local() as storage ############################################################################### # initial session_factory = sessionmaker(bind=engine) Session = scoped_session(session_factory) # only keep one session instance for each thread session_1 = Session() session_2 = Session() assert session_1 is session_2 # True # release and recreate session instance Session.remove() session_3 = Session() assert session_3 is session_1 # False # as a proxy Session.query() Session.add() Session.commit() # bind to a request scope def get_current_request(): # return an scope, for example, coroutine, thread or request pass Session = scoped_session(session_factory, scopefunc=get_current_request)