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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to