Fixed issue where the :meth:`.MigrationContext.autocommit_block` feature
would fail to function when using a SQLAlchemy engine using 2.0 future
mode.
Change-Id: I851573424c7cde2595ae22c816ec6580d7cab248
Fixes: #944
self.connection = (
self.impl.connection
) = base_connection.execution_options(isolation_level="AUTOCOMMIT")
+
+ # sqlalchemy future mode will "autobegin" in any case, so take
+ # control of that "transaction" here
+ fake_trans: Optional[Transaction] = self.connection.begin()
+ else:
+ fake_trans = None
try:
yield
finally:
if not self.as_sql:
assert self.connection is not None
+ if fake_trans is not None:
+ fake_trans.commit()
self.connection.execution_options(
isolation_level=current_level
)
--- /dev/null
+.. change::
+ :tags: bug, environment
+ :tickets: 944
+
+ Fixed issue where the :meth:`.MigrationContext.autocommit_block` feature
+ would fail to function when using a SQLAlchemy engine using 2.0 future
+ mode.
+
from alembic.testing.env import staging_env
from alembic.testing.env import write_script
from alembic.testing.fixtures import capture_context_buffer
+from alembic.testing.fixtures import FutureEngineMixin
from alembic.testing.fixtures import op_fixture
from alembic.testing.fixtures import TablesTest
from alembic.testing.fixtures import TestBase
)
+class PGAutocommitBlockTestFuture(FutureEngineMixin, PGAutocommitBlockTest):
+ pass
+
+
class PGOfflineEnumTest(TestBase):
def setUp(self):
staging_env()