Мне нужно добавить новый столбец в большую (5-метровую) таблицу django. У меня есть схема миграции на юг
, которая создает новый столбец. Сейчас я пишу сценарий datamigration
для заполнения нового столбца. Это выглядит так. (Если вы не знакомы с южными миграциями, просто игнорируйте orm.
перед названием модели.)
print "Migrating %s articles." % orm.Article.objects.count()
cnt = 0
for article in orm.Article.objects.iterator():
if cnt % 500 == 0:
print " %s done so far" % cnt
# article.newfield = calculate_newfield(article)
article.save()
cnt += 1
Я переключился с objects.all
на objects.iterator
для уменьшения требований к памяти. Но что-то все еще занимает огромную память, когда я запускаю этот скрипт. Даже с действительно полезной строкой, закомментированной, как указано выше, сценарий все равно вырастает до использования 10+ ГБ оперативной памяти, прежде чем продвинуться очень далеко по таблице, и я отказываюсь от этого.
Похоже, что-то держится за эти объекты в памяти . Как мне запустить это, чтобы не потреблять много памяти?
FWIW, я использую python 2.6, django 1.2.1, south 0.7.2, mysql 5.1.