2015-01-16 5 views
0

У меня есть эта миграция:Юг обновление данных о миграции по таблицам

book_metas = orm.DigitalProductFormat.objects.exclude(image__isnull=True) 
    for book_meta in book_metas: 
     book_meta.checksum = book_meta.image.checksum 
     book_meta.save() 

Если в книге есть изображение, а затем перенести контрольную сумму с картинки в книге. Есть около 1 000 000 книг, и эта миграция ведется навсегда. Есть ли хороший способ уменьшить количество раз, которое я должен назвать? Сохранить

Я посмотрел на использование метода обновления запросов Django, но, похоже, он не работает с таблицами.

Любые предложения будут оценены

ответ

1

Самый быстрый способ сделать эту миграцию, чтобы использовать необработанный запрос SQL.

Я не знаю, поддерживает ли ваша база данных UPDATE ... FROM ... JOIN, но следующие UPDATE ... SELECT должны работать практически на каждом db-сервере.

from south.db import db 
db.execute(""" 
    UPDATE app_digitalproductformat 
    SET checksum = (SELECT checksum FROM app_image 
        WHERE app_image.id=app_digitalproductformat.image_id) 
    WHERE image_id IS NOT NULL 
      """) 

Адрес app - имя вашего приложения django.

+0

Спасибо !, Я надеялся избежать этого, но если это единственный способ, я буду. – jhulme