kvesteri / sqlalchemy-continuum

Versioning extension for SQLAlchemy.
BSD 3-Clause "New" or "Revised" License
578 stars 127 forks source link

AttributeError: 'Session' object has no attribute 'transaction' #331

Open adorsett opened 1 year ago

adorsett commented 1 year ago

Getting the same traceback using sqlalchemy-continuum with sqlalchemy and flask-sqlalchemy. I've tried both and I still get this:

flaskapp  | Traceback (most recent call last):
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 2528, in wsgi_app
flaskapp  |     response = self.full_dispatch_request()
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1815, in full_dispatch_request
flaskapp  |     self.ensure_sync(func)()
flaskapp  |   File "/app/app/__init__.py", line 54, in init_db
flaskapp  |     user_datastore.commit()
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/flask_security/datastore.py", line 66, in commit
flaskapp  |     self.db.session.commit()
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/scoping.py", line 553, in commit
flaskapp  |     return self._proxied.commit()
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1905, in commit
flaskapp  |     trans.commit(_to_root=True)
flaskapp  |   File "<string>", line 2, in commit
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
flaskapp  |     ret_value = fn(self, *arg, **kw)
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1230, in commit
flaskapp  |     self.session.dispatch.after_commit(self.session)
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/event/attr.py", line 378, in __call__
flaskapp  |     fn(*args, **kw)
flaskapp  |   File "/usr/local/lib/python3.9/site-packages/sqlalchemy_continuum/manager.py", line 365, in clear
flaskapp  |     if session.transaction.nested:
flaskapp  | AttributeError: 'Session' object has no attribute 'transaction'

I changed line 365 in manager.py to if session.get_transaction().nested: and my traceback went away. Not sure if this is the correct behavior, but for some reason I'm getting an error and that made it go away.

guzzijones commented 1 year ago

Thanks, I just bumped into this as well. I will take a look further and see why this is happening. I will try to get a PR done.

marksteward commented 1 year ago

I'm fixing this as part of #326

guzzijones commented 1 year ago

this appears to happen for me if i use sqlalchemy 2.0

guzzijones commented 1 year ago

thanks @marksteward

ahmedmorad101 commented 1 year ago

in sqlalchemy 2.0 they replace transaction with _transaction

michaeltoohig commented 3 months ago

So just for others coming to this issue, I did succeed in using SQLAlchemy 2.0 with continuum. I had found this error because my version of continuum was old but upgrading continuum & sqlalchemy_utils fixed it.

But for further context, I was upgrading a project of mine which I haven't touched in a few years so I've also migrated from psycopg2 to psycopg3 in the process of fixing this so not sure how relevant that may have been.