From c4309f46270432c6d48dfc8b6bf2de20a01d0d6b Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Wed, 8 Oct 2025 18:20:57 +0200 Subject: [PATCH] [6.0.x] Fixed #36646 -- Added compatibility for oracledb 3.4.0. The Database.Binary, Date, and Timestamp attributes were changed from aliases to bytes, datetime.date, and datetime.datetime to factory functions in oracle/python-oracledb@869a887819cdac7fcd610f9d9d463ade49ea7 which made their usage inadequate for isinstance checks. Thanks John Wagenleitner for the report and Natalia for the triage. Co-authored-by: Mariusz Felisiak Backport of 315dbe675df338ae66c8fa43274a76ecbed7ef67 from main --- django/db/backends/oracle/base.py | 2 +- django/db/backends/oracle/operations.py | 4 ++-- django/db/backends/oracle/utils.py | 2 +- docs/releases/5.2.8.txt | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index bf79f7a6e3..48fa01ebee 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -433,7 +433,7 @@ class OracleParam: param = 0 if hasattr(param, "bind_parameter"): self.force_bytes = param.bind_parameter(cursor) - elif isinstance(param, (Database.Binary, datetime.timedelta)): + elif isinstance(param, (bytes, datetime.timedelta)): self.force_bytes = param else: # To transmit to the database, we need Unicode if supported diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index bc152c4e6e..6e3e249987 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -273,12 +273,12 @@ END; return value def convert_datefield_value(self, value, expression, connection): - if isinstance(value, Database.Timestamp): + if isinstance(value, datetime.datetime): value = value.date() return value def convert_timefield_value(self, value, expression, connection): - if isinstance(value, Database.Timestamp): + if isinstance(value, datetime.datetime): value = value.time() return value diff --git a/django/db/backends/oracle/utils.py b/django/db/backends/oracle/utils.py index fd7deab9a2..bd167528da 100644 --- a/django/db/backends/oracle/utils.py +++ b/django/db/backends/oracle/utils.py @@ -24,7 +24,7 @@ class BoundVar: "BooleanField": int, "FloatField": Database.DB_TYPE_BINARY_DOUBLE, "DateTimeField": Database.DB_TYPE_TIMESTAMP, - "DateField": Database.Date, + "DateField": datetime.date, "DecimalField": decimal.Decimal, } diff --git a/docs/releases/5.2.8.txt b/docs/releases/5.2.8.txt index fd35dd6af5..ef18d08022 100644 --- a/docs/releases/5.2.8.txt +++ b/docs/releases/5.2.8.txt @@ -9,5 +9,4 @@ Django 5.2.8 fixes several bugs in 5.2.7. Bugfixes ======== -* ... - +* Added compatibility for ``oracledb`` 3.4.0 (:ticket:`36646`).