Opened 12 hours ago

Closed 10 hours ago

#36650 closed Bug (duplicate)

oracledb-3.4.0 -> TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union

Reported by: MV Owned by:
Component: Database layer (models, ORM) Version: 5.2
Severity: Normal Keywords:
Cc: MV Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by MV)

When upgrading oracledb to version 3.4.0, Django stops working with error "TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union."

Using oracledb-3.3.0 works as expected.

Performing system checks...

System check identified no issues (0 silenced).
2025-10-08 09:18:33,020: INFO: acst_app.models.file: 10001 
2025-10-08 09:18:33,023: INFO: acst_app.models.file: 10001 elapsed time 00m00s
Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/root/.pyenv/versions/3.13.7/lib/python3.13/threading.py", line 1043, in _bootstrap_inner
    self.run()
    ~~~~~~~~^^
  File "/root/.pyenv/versions/3.13.7/lib/python3.13/threading.py", line 994, in run
    self._target(*self._args, **self._kwargs)
    ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
    ~~^^^^^^^^^^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/core/management/commands/runserver.py", line 137, in inner_run
    self.check_migrations()
    ~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/core/management/base.py", line 587, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/migrations/executor.py", line 18, in __init__
    self.loader = MigrationLoader(self.connection)
                  ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/migrations/loader.py", line 58, in __init__
    self.build_graph()
    ~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/migrations/loader.py", line 235, in build_graph
    self.applied_migrations = recorder.applied_migrations()
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/migrations/recorder.py", line 89, in applied_migrations
    if self.has_table():
       ~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/migrations/recorder.py", line 63, in has_table
    with self.connection.cursor() as cursor:
         ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/base/base.py", line 320, in cursor
    return self._cursor()
           ~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/base/base.py", line 296, in _cursor
    self.ensure_connection()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/base/base.py", line 279, in ensure_connection
    self.connect()
    ~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/base/base.py", line 258, in connect
    self.init_connection_state()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/oracle/base.py", line 336, in init_connection_state
    cursor.execute(
    ~~~~~~~~~~~~~~^
        "SELECT 1 FROM DUAL WHERE DUMMY %s"
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        % self._standard_operators["contains"],
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        ["X"],
        ^^^^^^
    )
    ^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/oracle/base.py", line 630, in execute
    query, params = self._fix_for_params(query, params, unify_by_values=True)
                    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/oracle/base.py", line 627, in _fix_for_params
    return query, self._format_params(params)
                  ~~~~~~~~~~~~~~~~~~~^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/oracle/base.py", line 555, in _format_params
    return {k: OracleParam(v, self, True) for k, v in params.items()}
               ~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/root/.pyenv/versions/django_acst_venv_3137/lib/python3.13/site-packages/django/db/backends/oracle/base.py", line 441, in __init__
    elif isinstance(param, (Database.Binary, datetime.timedelta)):
         ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union

Change History (4)

comment:1 by MV, 12 hours ago

Description: modified (diff)

comment:2 by MV, 11 hours ago

Description: modified (diff)

comment:3 by MV, 11 hours ago

Type: UncategorizedBug

comment:4 by Clifford Gama, 10 hours ago

Resolution: duplicate
Status: newclosed

Duplicate of #36646.

Note: See TracTickets for help on using tickets.
Back to Top