【问题标题】:How could I rewrite this loop of Django queries as a more efficient SQL query?我怎样才能将这个 Django 查询循环重写为更有效的 SQL 查询?
【发布时间】:2010-03-09 23:20:06
【问题描述】:

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

for position, player in enumerate(Player.objects.order_by('-score')):
    player.position = position + 1
    player.save()

有没有办法在一个 SQL 查询中执行此更新?我们使用的数据库后端是 MySQL。

感谢您的宝贵时间!

【问题讨论】:

    标签: sql mysql django


    【解决方案1】:

    如果您想到Player.objects.order_by('-score') 背后的SQL,它就是SELECT player.* from player order by player.score desc。如果没有嵌套的 MySQL 查询,我不确定您想要做什么,从技术上讲,无论如何这将是两个查询。

    如果你重新审视你原来的解决方案,它真的没那么复杂。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2016-12-13
      • 2012-05-06
      相关资源
      最近更新 更多