【问题标题】:South data migration update across tables跨表南数据迁移更新
【发布时间】:2015-01-16 08:58:41
【问题描述】:

我有这个迁移:

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 的查询集更新方法,但它似乎无法跨表工作。

任何建议将不胜感激

【问题讨论】:

    标签: django orm django-south data-migration


    【解决方案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 应用的名称。

    【讨论】:

    • 谢谢!,我希望避免为此进入原始 sql,但如果这是我唯一的方法。
    猜你喜欢
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2014-05-29
    • 2014-07-30
    • 1970-01-01
    • 2010-12-25
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多