From 3592e9fcb13b1353cfa78f03c2574fe9282ce5ac Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Mon, 11 Mar 2024 13:24:18 +0100 Subject: [PATCH] Optimized DatabaseOperations.bulk_insert_sql() a bit on Oracle. --- django/db/backends/oracle/operations.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index 4f4658299d7e..15a1b3335bbb 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -669,18 +669,20 @@ def _get_sequence_name(self, cursor, table, pk_name): return self._get_no_autofield_sequence_name(table) if row is None else row[0] def bulk_insert_sql(self, fields, placeholder_rows): + field_placeholders = [ + BulkInsertMapper.types.get( + getattr(field, "target_field", field).get_internal_type(), "%s" + ) + for field in fields + if field + ] query = [] for row in placeholder_rows: select = [] for i, placeholder in enumerate(row): # A model without any fields has fields=[None]. if fields[i]: - internal_type = getattr( - fields[i], "target_field", fields[i] - ).get_internal_type() - placeholder = ( - BulkInsertMapper.types.get(internal_type, "%s") % placeholder - ) + placeholder = field_placeholders[i] % placeholder # Add columns aliases to the first select to avoid "ORA-00918: # column ambiguously defined" when two or more columns in the # first select have the same value.