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
An AttributeError: __enter__ is a common Python error that indicates that a Python object has failed to instantiate with the expected class. The error usually occurs when a class hasn't been imported correctly. Also, it can occur if the user has forgotten to call the parent class in the class definition.
Session. commit() is used to commit the current transaction. It always issues Session. flush() beforehand to flush any remaining state to the database; this is independent of the “autoflush” setting.
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.
You have to call the function to get the context
with self.session_scope() as session:
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With