From 717ee63e5615a6c3a018351a07028513f9b01f0b Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Thu, 25 Oct 2018 19:54:48 -0400 Subject: [PATCH] Refs #27025 -- Removed obsolete sqlite3 transaction management workaround for Python 3.6+. Obsolete per https://bugs.python.org/issue10740#msg274816. --- django/db/backends/base/base.py | 11 +---------- django/db/backends/sqlite3/features.py | 4 +++- django/db/transaction.py | 4 ++-- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/django/db/backends/base/base.py b/django/db/backends/base/base.py index c8c18f5b19..f97d171c96 100644 --- a/django/db/backends/base/base.py +++ b/django/db/backends/base/base.py @@ -395,7 +395,7 @@ class BaseDatabaseWrapper: start_transaction_under_autocommit = ( force_begin_transaction_with_broken_autocommit and not autocommit and - self.features.autocommits_when_autocommit_is_off + hasattr(self, '_start_transaction_under_autocommit') ) if start_transaction_under_autocommit: @@ -595,15 +595,6 @@ class BaseDatabaseWrapper: allow_thread_sharing=False, ) - def _start_transaction_under_autocommit(self): - """ - Only required when autocommits_when_autocommit_is_off = True. - """ - raise NotImplementedError( - 'subclasses of BaseDatabaseWrapper may require a ' - '_start_transaction_under_autocommit() method' - ) - def schema_editor(self, *args, **kwargs): """ Return a new instance of this backend's SchemaEditor. diff --git a/django/db/backends/sqlite3/features.py b/django/db/backends/sqlite3/features.py index c56a393772..efb9413119 100644 --- a/django/db/backends/sqlite3/features.py +++ b/django/db/backends/sqlite3/features.py @@ -1,3 +1,5 @@ +import sys + from django.db import utils from django.db.backends.base.features import BaseDatabaseFeatures from django.utils.functional import cached_property @@ -13,7 +15,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): supports_timezones = False max_query_params = 999 supports_mixed_date_datetime_comparisons = False - autocommits_when_autocommit_is_off = True + autocommits_when_autocommit_is_off = sys.version_info < (3, 6) can_introspect_decimal_field = False can_introspect_duration_field = False can_introspect_positive_integer_field = True diff --git a/django/db/transaction.py b/django/db/transaction.py index 39c3402925..901d8b62e7 100644 --- a/django/db/transaction.py +++ b/django/db/transaction.py @@ -173,8 +173,8 @@ class Atomic(ContextDecorator): connection.commit_on_exit = True connection.needs_rollback = False if not connection.get_autocommit(): - # Some database adapters (namely sqlite3) don't handle - # transactions and savepoints properly when autocommit is off. + # sqlite3 in Python < 3.6 doesn't handle transactions and + # savepoints properly when autocommit is off. # Turning autocommit back on isn't an option; it would trigger # a premature commit. Give up if that happens. if connection.features.autocommits_when_autocommit_is_off: