w33zel
w33zel

Reputation: 175

AttributeError: __enter__ using with statement SqlAlchemy session

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

Upvotes: 15

Views: 26317

Answers (2)

swimmer
swimmer

Reputation: 3313

For those used to SQLAlchemy 1.4 way of running the session construction / close process via context manager like so:

with Session() as session:
    # Do something

If you are getting AttributeError: __enter__, check that the SQLAlchemy version in your environment is really SQLAlchemy>=1.4. More details in this answer.

Upvotes: 11

tdelaney
tdelaney

Reputation: 77337

You have to call the function to get the context

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

Upvotes: 14

Related Questions