Django批量更新,删除历史记录

时间:2016-04-29 22:23:01

标签: python django performance orm

我正在尝试优化我的Django后端性能。我有一个模型用户,我跟踪Django简史(https://django-simple-history.readthedocs.io/en/latest/)。

我希望能够批量更新我的用户模型,然后将其从历史记录中删除。对于单个用户,这将是这样的:

u = User.objects.get(id=user_id)
u.name = "new name"
u.save()
u.history.first().delete() # I don't want to track this change.

性能方面,哪个更好?

选项1:

users = User.objects.filter(needs_updating=True)
for user in users:
    user.name = "New name"
    user.save()
    user.history.first().delete()

选项2:

User.objects.filter(needs_updating=True).update(name="new name")
User.history.filter(name="new name").delete()

1 个答案:

答案 0 :(得分:1)

所有n的选项#2,其中n =需要更新的用户数,并假设needs_updatingname字段标有db_index或以其他方式在数据库中编入索引(假设你已经测试过它并且有效)。

根据我的计算:选项#1将对数据库执行1 + 2 * n查询,而选项#2始终对数据库执行2次查询。