按特定顺序更新查询集
Posted
技术标签:
【中文标题】按特定顺序更新查询集【英文标题】:update a queryset in a specific order 【发布时间】:2015-04-13 10:39:25 【问题描述】:我有一个“索引”字段存储一系列整数,为了安全起见,我将其设置为唯一的。
现在我想将此字段加一,为了保持唯一性,我按降序更新值:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
令我惊讶的是,在某些机器上出现了 IntegrityError 被提出并抱怨重复的索引值。
有什么我错过的吗?我只能一个一个地保存记录吗?
提前致谢!
更新:
我认为根本问题是 SQL UPDATE 命令中没有 ORDER BY(请参阅 UPDATE with ORDER BY 和 SQL Server: UPDATE a table by using ORDER BY)
显然 django 只是将我的语句转换为带有 ORDER_BY 的 SQL UPDATE,这会导致未定义的行为并在每台机器上创建不同的结果。
【问题讨论】:
【参考方案1】:您正在对查询集进行升序排序。您可以通过按以下顺序在字段名称中添加“-”来使其降序:
MyModel.objects.all().order_by('-index').update(index=F('index')+1)
Django docs for order_by
【讨论】:
以上是关于按特定顺序更新查询集的主要内容,如果未能解决你的问题,请参考以下文章