跨表南数据迁移更新
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 应用程序的名称。
我有这个迁移:
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 应用程序的名称。