10000 Refs #36143 -- Tested bulk_batch_size limit for bulk_update and bulk_… · feanil/django@38660a6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 38660a6

Browse files
laymonagesarahboyce
authored andcommitted
Refs #36143 -- Tested bulk_batch_size limit for bulk_update and bulk_create.
1 parent 37f2a77 commit 38660a6

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

tests/bulk_create/tests.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,14 @@ def test_explicit_batch_size_respects_max_batch_size(self):
293293
with self.assertNumQueries(ceil(len(objs) / max_batch_size)):
294294
Country.objects.bulk_create(objs, batch_size=max_batch_size + 1)
295295

296+
@skipUnlessDBFeature("has_bulk_insert")
297+
def test_max_batch_size(self):
298+
objs = [Country(name=f"Country {i}") for i in range(1000)]
299+
fields = ["name", "iso_two_letter", "description"]
300+
max_batch_size = connection.ops.bulk_batch_size(fields, objs)
301+
with self.assertNumQueries(ceil(len(objs) / max_batch_size)):
302+
Country.objects.bulk_create(objs)
303+
296304
@skipUnlessDBFeature("has_bulk_insert")
297305
def test_bulk_insert_expressions(self):
298306
Restaurant.objects.bulk_create(

tests/queries/test_bulk_update.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import datetime
2+
from math import ceil
23

34
from django.core.exceptions import FieldDoesNotExist
5+
from django.db import connection
46
from django.db.models import F
57
from django.db.models.functions import Lower
68
from django.db.utils import IntegrityError
@@ -69,6 +71,15 @@ def test_batch_size(self):
6971
with self.assertNumQueries(len(self.notes)):
7072
Note.objects.bulk_update(self.notes, fields=["note"], batch_size=1)
7173

74+
def test_max_batch_size(self):
75+
max_batch_size = connection.ops.bulk_batch_size(
76+
# PK is used twice, see comment in bulk_update().
77+
[Note._meta.pk, Note._meta.pk, Note._meta.get_field("note")],
78+
self.notes,
79+
)
80+
with self.assertNumQueries(ceil(len(self.notes) / max_batch_size)):
81+
Note.objects.bulk_update(self.notes, fields=["note"])
82+
7283
def test_unsaved_models(self):
7384
objs = self.notes + [Note(note="test", misc="test")]
7485
msg = "All bulk_update() objects must have a primary key set."

0 commit comments

Comments
 (0)
0