跨表南数据迁移更新

South data migration update across tables

我有这个迁移:

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 本书,而这种迁移将持续很长时间。有什么好的方法可以减少我必须调用 save

的次数

我查看了使用 Django 的查询集更新方法,但它似乎无法跨表工作。

如有任何建议,我们将不胜感激

执行此迁移的最快方法是使用原始 SQL 查询。

我不知道您的数据库是否支持 UPDATE ... FROM ... JOIN 语法,但以下 UPDATE ... SELECT 应该几乎适用于每个数据库服务器。

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 应用程序的名称。