diff options
-rw-r--r-- | lib/sqlalchemy/engine/base.py | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/default.py | 23 |
2 files changed, 18 insertions, 10 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 26d1b69d9..e74e00d84 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -729,7 +729,6 @@ class Connection(Connectable): :class:`~sqlalchemy.engine.Engine`, see the ``connect()`` and ``contextual_connect()`` methods of Engine. """ - self.engine = engine self.__connection = connection or engine.raw_connection() self.__transaction = None @@ -1133,8 +1132,8 @@ class Connection(Connectable): if context.isinsert and not context.executemany: context.post_insert() - - if context.should_autocommit and not self.in_transaction(): + + if self.__transaction is None and context.should_autocommit: self._commit_impl() return context.get_result_proxy()._autoclose() diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 4b2e3b681..bb3688597 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -238,7 +238,6 @@ class DefaultExecutionContext(base.ExecutionContext): else: self.statement = unicode(compiled) self.isinsert = self.isupdate = self.isdelete = self.executemany = False - self.should_autocommit = True self.result_map = None self.cursor = self.create_cursor() self.compiled_parameters = [] @@ -269,10 +268,7 @@ class DefaultExecutionContext(base.ExecutionContext): self.isinsert = compiled.isinsert self.isupdate = compiled.isupdate self.isdelete = compiled.isdelete - self.should_autocommit = compiled.statement._autocommit self.execution_options = compiled.statement._execution_options - if self.should_autocommit is expression.PARSE_AUTOCOMMIT: - self.should_autocommit = self.should_autocommit_text(self.statement) if not parameters: self.compiled_parameters = [compiled.construct_params()] @@ -295,14 +291,27 @@ class DefaultExecutionContext(base.ExecutionContext): else: self.statement = statement self.isinsert = self.isupdate = self.isdelete = False - self.should_autocommit = self.should_autocommit_text(statement) self.cursor = self.create_cursor() else: # no statement. used for standalone ColumnDefault execution. self.statement = self.compiled = None - self.isinsert = self.isupdate = self.isdelete = self.executemany = self.should_autocommit = False + self.isinsert = self.isupdate = self.isdelete = self.executemany = False self.cursor = self.create_cursor() - + + @util.memoized_property + def should_autocommit(self): + + if self.compiled: + autocommit = self.compiled.statement._autocommit + if autocommit is expression.PARSE_AUTOCOMMIT: + return self.should_autocommit_text(self.statement) + else: + return autocommit + elif self.statement: + return self.should_autocommit_text(self.statement) + else: + return False + @util.memoized_property def _is_explicit_returning(self): return self.compiled and \ |