Fixed #28231 -- Doc'd that QuerySet.bulk_create() casts objs to a list.
This commit is contained in:
parent
1b753b2d60
commit
52aa26e697
|
@ -1965,6 +1965,21 @@ This has a number of caveats though:
|
|||
does not retrieve and set the primary key attribute, as ``save()`` does,
|
||||
unless the database backend supports it (currently PostgreSQL).
|
||||
* It does not work with many-to-many relationships.
|
||||
* It casts ``objs`` to a list, which fully evaluates ``objs`` if it's a
|
||||
generator. The cast allows inspecting all objects so that any objects with a
|
||||
manually set primary key can be inserted first. If you want to insert objects
|
||||
in batches without evaluating the entire generator at once, you can use this
|
||||
technique as long as the objects don't have any manually set primary keys::
|
||||
|
||||
from itertools import islice
|
||||
|
||||
batch_size = 100
|
||||
objs = (Entry(headling'Test %s' % i) for i in range(1000))
|
||||
while True:
|
||||
batch = list(islice(objs, batch_size))
|
||||
if not batch:
|
||||
break
|
||||
Entry.objects.bulk_create(batch, batch_size)
|
||||
|
||||
The ``batch_size`` parameter controls how many objects are created in a single
|
||||
query. The default is to create all objects in one batch, except for SQLite
|
||||
|
|
Loading…
Reference in New Issue