mirror of
				https://github.com/django/django.git
				synced 2025-10-28 16:16:12 +00:00 
			
		
		
		
	Fixed #21452 -- Non-autocommit connections to PostgreSQL.
When settings.DATABASES['default']['AUTOCOMMIT'] = False, the connection wasn't in autocommit mode but Django pretended it was. Thanks Anssi for analysing this issue. Refs #17062.
This commit is contained in:
		
				
					committed by
					
						 Anssi Kääriäinen
						Anssi Kääriäinen
					
				
			
			
				
	
			
			
			
						parent
						
							94f90a1784
						
					
				
				
					commit
					b2baa1ff26
				
			| @@ -148,11 +148,11 @@ class DatabaseWrapper(BaseDatabaseWrapper): | ||||
|                 conn_tz = get_parameter_status('TimeZone') | ||||
|  | ||||
|             if conn_tz != tz: | ||||
|                 # Set the time zone in autocommit mode (see #17062) | ||||
|                 self.set_autocommit(True) | ||||
|                 self.connection.cursor().execute( | ||||
|                     self.ops.set_time_zone_sql(), [tz] | ||||
|                 ) | ||||
|                 # Commit after setting the time zone (see #17062) | ||||
|                 self.connection.commit() | ||||
|         self.connection.set_isolation_level(self.isolation_level) | ||||
|  | ||||
|     def create_cursor(self): | ||||
|   | ||||
| @@ -373,10 +373,25 @@ class PostgresNewConnectionTests(TestCase): | ||||
|             tz = cursor.fetchone()[0] | ||||
|             self.assertEqual(new_tz, tz) | ||||
|         finally: | ||||
|             try: | ||||
|                 new_connection.close() | ||||
|             except DatabaseError: | ||||
|                 pass | ||||
|             new_connection.close() | ||||
|  | ||||
|     @unittest.skipUnless( | ||||
|         connection.vendor == 'postgresql', | ||||
|         "This test applies only to PostgreSQL") | ||||
|     def test_connect_non_autocommit(self): | ||||
|         """ | ||||
|         The connection wrapper shouldn't believe that autocommit is enabled | ||||
|         after setting the time zone when AUTOCOMMIT is False (#21452). | ||||
|         """ | ||||
|         databases = copy.deepcopy(settings.DATABASES) | ||||
|         new_connections = ConnectionHandler(databases) | ||||
|         new_connection = new_connections[DEFAULT_DB_ALIAS] | ||||
|         try: | ||||
|             new_connection.settings_dict['AUTOCOMMIT'] = False | ||||
|             cursor = new_connection.cursor() | ||||
|             self.assertFalse(new_connection.get_autocommit()) | ||||
|         finally: | ||||
|             new_connection.close() | ||||
|  | ||||
|  | ||||
| # This test needs to run outside of a transaction, otherwise closing the | ||||
|   | ||||
		Reference in New Issue
	
	Block a user