繁体   English   中英

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

[英]How could I rewrite this loop of Django queries as a more efficient SQL query?

这是在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,则它是SELECT player.* from player order by player.score descSELECT player.* from player order by player.score desc 我不确定没有嵌套的MySQL查询是否可以实现您要做什么,从技术上讲,无论如何这将是两个查询。

如果您重新访问原始解决方案,实际上并没有那么复杂。

如果您担心性能,我建议您查看django-debug-toolbar如果尚未安装)。 这个小程序包提供查询的时间和统计信息。 最新版本(0.8.3)还提供了一个CLI插件,该插件可向您显示使用manage.py shell (称为debugsqlshell )执行的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM