更新多个模型对象的更有效方法,每个对象都具有唯一值

More efficient way to update multiple model objects each with unique values

我正在寻找一种更有效的方法来更新一堆模型对象。每天晚上,我都会在后台作业中从 API 中创建 'NCAABGame' 个对象,一旦得分是最终的。

早上我必须使用 API 未提供的统计信息更新模型中的所有字段。

截至目前,我从 excel 文件中获取格式化的统计信息,然后复制并粘贴每个更新,然后 运行 像这样:

    NCAABGame.objects.filter(
        name__name='San Francisco', updated=False).update(
        field_goals=38,
        field_goal_attempts=55,
        three_points=11,
        three_point_attempts=24,
        ...
    )

前几天有 183 场比赛,大部分时间在 20-30 场之间,所以这样做非常及时。我调查了 bulk_update 和其他一些事情,但我找不到真正的解决方案。我确定有一些简单的东西我只是没有看到。

感谢您提供的任何想法或解决方案。

如果您无论如何都需要手动更新通过 API 创建的每个对象,我什至不会费心通过 Django。只需从 API 直接在 Excel 中加载您的游戏,然后在 Excel 中进行编辑并保存为 CSV 文件。然后我会将 CSV 直接添加到数据库中 table,除非有特定原因必须通过 Django 创建对象?我的意思是,您当然可以使用类似下面的方法来做到这一点,可以对其进行修改以通过更新也适用于您当前的方法,但是您需要首先检索要更新的对象的正确 pk。

import csv
  
with open("my_data.csv", 'r') as my_data_file:
    reader = csv.reader(my_data_file) 
    for row in reader:

        # get_or_create returns a tuple. 'created' is a boolean that indicates
        # if a new object was created or not, with game holding the object that
        # was either retrieved or created

        game, created = NCAABGame.objects.get_or_create(
            name=row[0],
            field_goals=row[1],
            field_goal_attempts=row[2],
            ....,
            )