From a2ce4900a63f91f0cc685ac157762610c199c391 Mon Sep 17 00:00:00 2001 From: Jacob Walls Date: Tue, 3 Jun 2025 21:43:50 -0400 Subject: [PATCH] Fixed #36430 -- Removed artificially low limit on single field bulk operations on SQLite. --- django/db/backends/sqlite3/operations.py | 7 +------ tests/backends/sqlite/test_operations.py | 3 ++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/django/db/backends/sqlite3/operations.py b/django/db/backends/sqlite3/operations.py index 2a5179755b..4a1693768c 100644 --- a/django/db/backends/sqlite3/operations.py +++ b/django/db/backends/sqlite3/operations.py @@ -32,9 +32,6 @@ class DatabaseOperations(BaseDatabaseOperations): """ SQLite has a variable limit defined by SQLITE_LIMIT_VARIABLE_NUMBER (reflected in max_query_params). - - If there's only a single field to insert, the limit is 500 - (SQLITE_MAX_COMPOUND_SELECT). """ fields = list( chain.from_iterable( @@ -46,9 +43,7 @@ class DatabaseOperations(BaseDatabaseOperations): for field in fields ) ) - if len(fields) == 1: - return 500 - elif len(fields) > 1: + if fields: return self.connection.features.max_query_params // len(fields) else: return len(objs) diff --git a/tests/backends/sqlite/test_operations.py b/tests/backends/sqlite/test_operations.py index ab6efaa771..0c2772301b 100644 --- a/tests/backends/sqlite/test_operations.py +++ b/tests/backends/sqlite/test_operations.py @@ -93,7 +93,8 @@ class SQLiteOperationsTests(TestCase): first_name_field = Person._meta.get_field("first_name") last_name_field = Person._meta.get_field("last_name") self.assertEqual( - connection.ops.bulk_batch_size([first_name_field], [Person()]), 500 + connection.ops.bulk_batch_size([first_name_field], [Person()]), + connection.features.max_query_params, ) self.assertEqual( connection.ops.bulk_batch_size(