更新多个模型对象的更有效方法,每个对象都具有唯一值
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],
....,
)
我正在寻找一种更有效的方法来更新一堆模型对象。每天晚上,我都会在后台作业中从 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],
....,
)