AttributeError: __enter__ using with statement SqlAlchemy session

w33zel picture w33zel · Apr 15, 2017 · Viewed 15.6k times · Source

I'm getting this AttributeError: __enter__ when I try to use SQLAalchemy session like in this guide.

My code:

Session = scoped_session(sessionmaker(autoflush=True, autocommit=False, bind=engine))
    
@contextmanager
def session_scope():
    session = Session()
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

class SomeClass:

    def __init__(self):
        self.session_scope = session_scope

    def something_with_session(self):

        with self.session_scope as session:  # <-- error

What am I doing wrong? I'm using Python 3.6

Answer

tdelaney picture tdelaney · Apr 15, 2017

You have to call the function to get the context

with self.session_scope() as session:
    ...