#27385: Error in bulk_create() when objs length is a multiple plus one of
batch_size
----------------------------------------------+--------------------
     Reporter:  David Barragán Merino         |      Owner:  nobody
         Type:  Bug                           |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  1.10
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  1
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+--------------------
 With the model


 {{{
 from django.db import models

 class TestModel(models.Model):
     number = models.IntegerField()

 }}}

 using a "real" db (postgresql) if I try to do this

 {{{
 objs = [TestModel(number=n) for n in range(11)]
 TestModel.objects.bulk_create(objs, batch_size=10)
 }}}

 I get this error

 {{{
 /home/bameda/.virtualenvs/taiga/lib/python3.5/site-
 packages/django/db/models/manager.py in manager_method(self, *args,
 **kwargs)
      83         def create_method(name, method):
      84             def manager_method(self, *args, **kwargs):
 ---> 85                 return getattr(self.get_queryset(), name)(*args,
 **kwargs)
      86             manager_method.__name__ = method.__name__
      87             manager_method.__doc__ = method.__doc__

 /home/bameda/.virtualenvs/taiga/lib/python3.5/site-
 packages/django/db/models/query.py in bulk_create(self, objs, batch_size)
     450                 if objs_without_pk:
     451                     fields = [f for f in fields if not
 isinstance(f, AutoField)]
 --> 452                     ids = self._batched_insert(objs_without_pk,
 fields, batch_size)
     453                     if
 connection.features.can_return_ids_from_bulk_insert:
     454                         assert len(ids) == len(objs_without_pk)

 /home/bameda/.virtualenvs/taiga/lib/python3.5/site-
 packages/django/db/models/query.py in _batched_insert(self, objs, fields,
 batch_size)
    1062                 inserted_id = self._insert(item, fields=fields,
 using=self.db, return_id=True)
    1063                 if len(objs) > 1:
 -> 1064                     inserted_ids.extend(inserted_id)
    1065                 if len(objs) == 1:
    1066                     inserted_ids.append(inserted_id)

 TypeError: 'int' object is not iterable
 }}}

 The patch https://github.com/django/django/pull/7433 solved it.

 It happens in master and in 1.10.x

--
Ticket URL: <https://code.djangoproject.com/ticket/27385>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.29d005f83c7207ab89f026c159fdec96%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to