[Python] DatabaseError: DatabaseWrapper objects created in a thread can only be used in that...

Discussão em 'Python' iniciado por Stack, Agosto 15, 2025.

  1. Stack

    Stack Membro Participativo

    I'm having the following issue, when I try to execute my Django tests:

    /Users/myUser/Desktop/myProject-py/src/project/project/billing_v2/tests/test_accounting_integration_heading.py::AccountingIntegrationHeadingAPITests::test_create_accounting_integration_heading failed with error: Test failed with exception
    request = <SubRequest '_django_setup_unittest' for <TestCaseFunction test_makemigrations_command>>
    django_db_blocker = <pytest_django.plugin._DatabaseBlocker object at 0x10602ae80>
    @pytest.fixture(autouse=True, scope="class")
    def _django_setup_unittest(
    request,
    django_db_blocker: "_DatabaseBlocker",
    ) -> Generator[None, None, None]:
    """Setup a django unittest, internal to pytest-django."""
    if not django_settings_is_configured() or not is_django_unittest(request):
    yield
    return

    # Fix/patch pytest.
    # Before pytest 5.4: https://github.com/pytest-dev/pytest/issues/5991
    # After pytest 5.4: https://github.com/pytest-dev/pytest-django/issues/824
    from _pytest.unittest import TestCaseFunction
    original_runtest = TestCaseFunction.runtest

    def non_debugging_runtest(self) -> None:
    self._testcase(result=self)

    try:
    TestCaseFunction.runtest = non_debugging_runtest # type: ignore[assignment]

    > request.getfixturevalue("django_db_setup")
    .venv/lib/python3.8/site-packages/pytest_django/plugin.py:490:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    .venv/lib/python3.8/site-packages/pytest_django/fixtures.py:122: in django_db_setup
    db_cfg = setup_databases(
    .venv/lib/python3.8/site-packages/django/test/utils.py:179: in setup_databases
    connection.creation.create_test_db(
    .venv/lib/python3.8/site-packages/django/db/backends/base/creation.py:59: in create_test_db
    self.connection.close()
    .venv/lib/python3.8/site-packages/django/utils/asyncio.py:33: in inner
    return func(*args, **kwargs)
    .venv/lib/python3.8/site-packages/django/db/backends/base/base.py:285: in close
    self.validate_thread_sharing()
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    self = <django.contrib.gis.db.backends.postgis.base.DatabaseWrapper object at 0x118e55ee0>
    def validate_thread_sharing(self):
    """
    Validate that the connection isn't accessed by another thread than the
    one which originally created it, unless the connection was explicitly
    authorized to be shared between threads (via the `inc_thread_sharing()`
    method). Raise an exception if the validation fails.
    """
    if not (self.allow_thread_sharing or self._thread_ident == _thread.get_ident()):
    > raise DatabaseError(
    "DatabaseWrapper objects created in a "
    "thread can only be used in that same thread. The object "
    "with alias '%s' was created in thread id %s and this is "
    "thread id %s."
    % (self.alias, self._thread_ident, _thread.get_ident())
    )
    E django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 8482561792 and this is thread id 13188866304.
    .venv/lib/python3.8/site-packages/django/db/backends/base/base.py:552: DatabaseError


    However, this problem occurs only when, I try to execute all of my tests at once, if I execute them one by one or module by module, it is all good.

    Versions Django - 3.2.25 Python - 3.8.20

    My DB engine settings in settings.py

    "ENGINE": "django.contrib.gis.db.backends.postgis",

    Continue reading...

Compartilhe esta Página