diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 6569120287..99d68221e8 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -110,9 +110,8 @@ class BaseDatabaseWrapper(object): # Establish the connection conn_params = self.get_connection_params() self.connection = self.get_new_connection(conn_params) + self.set_autocommit(self.settings_dict['AUTOCOMMIT']) self.init_connection_state() - if self.settings_dict['AUTOCOMMIT']: - self.set_autocommit(True) connection_created.send(sender=self.__class__, connection=self) def ensure_connection(self): diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index aae3240e12..cdb101d20c 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -627,6 +627,9 @@ class DatabaseWrapper(BaseDatabaseWrapper): # Django docs specify cx_Oracle version 4.3.1 or higher, but # stmtcachesize is available only in 4.3.2 and up. pass + # Ensure all changes are preserved even when AUTOCOMMIT is False. + if not self.get_autocommit(): + self.commit() def create_cursor(self): return FormatStylePlaceholderCursor(self.connection) diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index b58a23c93b..33f885d50c 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -148,12 +148,12 @@ class DatabaseWrapper(BaseDatabaseWrapper): conn_tz = get_parameter_status('TimeZone') if conn_tz != tz: - self.connection.cursor().execute( - self.ops.set_time_zone_sql(), [tz] - ) + cursor = self.connection.cursor() + cursor.execute(self.ops.set_time_zone_sql(), [tz]) + cursor.close() # Commit after setting the time zone (see #17062) - self.connection.commit() - self.connection.set_isolation_level(self.isolation_level) + if not self.get_autocommit(): + self.connection.commit() def create_cursor(self): cursor = self.connection.cursor() diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index f33926d10b..0525bb2e12 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -920,6 +920,11 @@ Miscellaneous * GeoDjango dropped support for GEOS < 3.1. +* The ``init_connection_state`` method of database backends now executes in + autocommit mode (unless you set :setting:`AUTOCOMMIT ` + to ``False``). If you maintain a custom database backend, you should check + that method. + Features deprecated in 1.7 ==========================