У меня есть миллионы объектов в базе данных Postgres, и мне нужно отправлять данные от 200 из них за раз в API, что даст мне дополнительную информацию (API может обрабатывать до 200 элементов за раз время). Я перепробовал несколько стратегий. Первая стратегия закончилась тем, что мой скрипт был убит, потому что он занимал слишком много памяти. Эта попытка ниже работала лучше, но я получил следующую ошибку: django .db.utils.DataError: bigint вне диапазона. Эта ошибка произошла, когда переменная «start» достигла 42 000. Каков более эффективный способ выполнить эту задачу? Спасибо.
articles_to_process = Article.objects.all() # This will be in the millions
dois = articles_to_process.values_list('doi', flat=True) # These are IDs of articles
start = 0
end = 200 # The API to which I will send IDs can only return up to 200 records at a time.
number_of_dois = dois.count()
times_to_loop = (number_of_dois / 200) + 1
while times_to_loop > 0:
times_to_loop = times_to_loop - 1
chunk = dois[start:end]
doi_string = ', '.join(chunk)
start = start + 200
end = end + 200
[DO API CALL, GET DATA FOR EACH ARTICLE, SAVE THAT DATA TO ARTICLE]