Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Django查询的循环重写为更高效的SQL查询?_Sql_Mysql_Django - Fatal编程技术网

如何将Django查询的循环重写为更高效的SQL查询?

如何将Django查询的循环重写为更高效的SQL查询?,sql,mysql,django,Sql,Mysql,Django,这是在PlayerDjango模型上更新非规范化字段的低效方法。该字段基本上存储了玩家在排行榜上的位置,这是我们用于向给定玩家显示“附近”玩家的系统的要求 for position, player in enumerate(Player.objects.order_by('-score')): player.position = position + 1 player.save() 有没有办法在一个SQL查询中执行此更新?我们使用的数据库后端是MySQL 谢谢你的时间 如果你想

这是在
Player
Django模型上更新非规范化字段的低效方法。该字段基本上存储了玩家在排行榜上的位置,这是我们用于向给定玩家显示“附近”玩家的系统的要求

for position, player in enumerate(Player.objects.order_by('-score')):
    player.position = position + 1
    player.save()
有没有办法在一个SQL查询中执行此更新?我们使用的数据库后端是MySQL


谢谢你的时间

如果你想到
Player.objects.order_by('-score')
背后的SQL,那就是
从Player order by Player.score desc中选择Player.*。我不确定如果没有一个嵌套的MySQL查询,您想要做什么是可能的,从技术上讲,这将是两个查询

如果您重新审视原始解决方案,它实际上并没有那么复杂


如果性能是你关心的问题,我建议你检查一下,如果你还没有。这个小软件包提供查询的计时和统计信息。最新版本(0.8.3)还提供了一个CLI插件,显示使用
manage.py shell
(称为
debugsqlshell
)执行的查询

如果你想到
Player.objects.order_by('-score')
背后的SQL,那就是
从Player order by Player.score desc中选择Player.*。我不确定如果没有一个嵌套的MySQL查询,您想要做什么是可能的,从技术上讲,这将是两个查询

如果您重新审视原始解决方案,它实际上并没有那么复杂

如果性能是你关心的问题,我建议你检查一下,如果你还没有。这个小软件包提供查询的计时和统计信息。最新版本(0.8.3)还提供了一个CLI插件,显示使用
manage.py shell
(称为
debugsqlshell
)执行的查询