我有这个迁移:
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的queryset更新方法,但似乎无法跨表工作。
任何建议都将不胜感激
答案 0 :(得分:1)
执行此迁移的最快方法是使用原始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应用程序的名称。