我试图在Django(python)中按特定顺序一次更新所有对象的position字段。
这就是我现在所做的,但问题是它会产生大量的查询。
servers = frontend_models.Server.objects.all().order_by('-vote_count')
i = 1
for server in servers:
server.last_rank = i
server.save()
i += 1
有没有更新的方法
Model.objects.all().order_by('some_field').update(position=some_number_that_changes_for each_object)
谢谢你!
您可以使用} 表达式执行相同的操作:
django.db.models
中的^{它将生成一个SQL查询来更新所有的列值,因此对数据库也是有效的。
据我所知,Django的对象关系映射系统并没有提供一种表达这种更新操作的方法。但是如果您知道如何用SQL来表示它,那么可以通过custom SQL query来运行它:
不同的数据库引擎以不同的方式表示此操作。在MySQL中,您将运行以下查询:
在PostgreSQL中,我认为您可以使用
(但这还没有测试,所以要小心!)。
相关问题 更多 >
编程相关推荐