Following this guide
http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html#joining-a-session-into-an-external-transaction-such-as-for-test-suites
using SQLite I created the following test code:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:', echo=True)
conn = engine.connect()
trans = conn.begin()
session = Session(bind=conn)
session.begin_nested()
session.execute('SELECT 1')
session.commit()
session.begin_nested()
session.execute('SELECT 1')
session.rollback()
trans.rollback()
conn.close()
Running this throws an exceptions:
2016-10-12 14:03:45,484 INFO sqlalchemy.engine.base.Engine SELECT
CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2016-10-12 14:03:45,485 INFO sqlalchemy.engine.base.Engine ()
2016-10-12 14:03:45,485 INFO sqlalchemy.engine.base.Engine SELECT
CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2016-10-12 14:03:45,485 INFO sqlalchemy.engine.base.Engine ()
2016-10-12 14:03:45,486 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2016-10-12 14:03:45,486 INFO sqlalchemy.engine.base.Engine SAVEPOINT
sa_savepoint_1
2016-10-12 14:03:45,487 INFO sqlalchemy.engine.base.Engine ()
2016-10-12 14:03:45,487 INFO sqlalchemy.engine.base.Engine SELECT 1
2016-10-12 14:03:45,487 INFO sqlalchemy.engine.base.Engine ()
2016-10-12 14:03:45,487 INFO sqlalchemy.engine.base.Engine RELEASE
SAVEPOINT sa_savepoint_1
2016-10-12 14:03:45,487 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
File "sqla_test.py", line 12, in <module>
session.commit()
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/orm/session.py",
line 874, in commit
self.transaction.commit()
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/orm/session.py",
line 465, in commit
t[1].commit()
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1626, in commit
self._do_commit()
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1682, in _do_commit
self._savepoint, self._parent)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 760, in _release_savepoint_impl
self.engine.dialect.do_release_savepoint(self, name)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/default.py",
line 456, in do_release_savepoint
connection.execute(expression.ReleaseSavepointClause(name))
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 945, in execute
return meth(self, multiparams, params)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/sql/elements.py",
line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1189, in _execute_context
context)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1393, in _handle_dbapi_exception
exc_info
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/util/compat.py",
line 202, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
line 1182, in _execute_context
context)
File
"/Users/fruechel/.virtualenvs/foo/lib/python2.7/site-packages/sqlalchemy/engine/default.py",
line 462, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such
savepoint: sa_savepoint_1 [SQL: u'RELEASE SAVEPOINT sa_savepoint_1']
I tested this with Python 2.7 & 3.5 and on SQLAlchemy 1.0.13, 1.0.15 and
1.1.1 and get the same result. Using PostgreSQL instead works perfectly
fine and issues the expected queries.
Before reporting this as a bug I wanted to make sure I'm not missing
something, hence this mail.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.