euscanwww: add missing file
Signed-off-by: Corentin Chary <corentin.chary@gmail.com>
This commit is contained in:
parent
2544af2e32
commit
6f9e575bbc
22
euscanwww/djeuscan/utils.py
Normal file
22
euscanwww/djeuscan/utils.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
def queryset_iterator(queryset, chunksize=1000):
|
||||||
|
'''''
|
||||||
|
Iterate over a Django Queryset ordered by the primary key
|
||||||
|
|
||||||
|
This method loads a maximum of chunksize (default: 1000) rows in it's
|
||||||
|
memory at the same time while django normally would load all rows in it's
|
||||||
|
memory. Using the iterator() method only causes it to not preload all the
|
||||||
|
classes.
|
||||||
|
|
||||||
|
Note that the implementation of the iterator does not support ordered query sets.
|
||||||
|
'''
|
||||||
|
import gc
|
||||||
|
|
||||||
|
pk = 0
|
||||||
|
last_pk = queryset.order_by('-pk')[0].pk
|
||||||
|
queryset = queryset.order_by('pk')
|
||||||
|
while pk < last_pk:
|
||||||
|
for row in queryset.filter(pk__gt=pk)[:chunksize]:
|
||||||
|
pk = row.pk
|
||||||
|
yield row
|
||||||
|
gc.collect()
|
Loading…
Reference in New Issue
Block a user