diff --git a/django/test/testcases.py b/django/test/testcases.py index 51b07ae50d4e..bf035bd531fc 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -280,6 +280,8 @@ def patched_ensure_connection(self, *args, **kwargs): self.connection is None and self.alias not in cls.databases and self.alias != NO_DB_ALIAS + # Dynamically created connections are always allowed. + and self.alias in connections ): # Connection has not yet been established, but the alias is not allowed. message = cls._disallowed_database_msg % { diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py index 7e9505f76210..fab7f27aa11f 100644 --- a/tests/test_utils/tests.py +++ b/tests/test_utils/tests.py @@ -2161,6 +2161,16 @@ def thread_func(): conn.close() conn.dec_thread_sharing() + def test_allowed_database_copy_queries(self): + new_connection = connection.copy("dynamic_connection") + try: + with new_connection.cursor() as cursor: + sql = f"SELECT 1{new_connection.features.bare_select_suffix}" + cursor.execute(sql) + self.assertEqual(cursor.fetchone()[0], 1) + finally: + new_connection.close() + class DatabaseAliasTests(SimpleTestCase): def setUp(self):