【问题标题】:querying an sqlite3 database查询 sqlite3 数据库
【发布时间】:2013-04-19 15:33:02
【问题描述】:

所以我正在查询一个名为 golfDB 的数据库,它由一个名为 player 的表组成,其中包含 5 个字段:

  • 姓名(玩家姓名)
  • totalGross(每轮总分的总和)
  • totalRounds(已玩的回合数)
  • pars(制作的pars总数)
  • 小鸟(小鸟总数)

我正在开发的功能应该是按照平均得分(totalGross/totalRounds)降序排列球员。

我不完全确定如何执行此操作,我的代码目前正在将所有组件(玩家、总得分和总回合数)分离到它们自己的列表中。我当时在想,我可以将每个总总分列表项除以总轮次列表中的每个项目,但我不确定如何将这些分数链接回相应的玩家,以便可以订购它们。

我不知道是否可以这样做,所以有人有什么建议或想法吗?

def queryDBplayers(cursor):
    """lists the players in order of their total gross score"""
    cursor.execute('select name, totalGross, totalRounds from players')
    answer= cursor.fetchall()
    players = list()
    for items in answer:
        players.append(items[0])
    totalGrossScore = list()
    for items in answer:
        totalGrossScore.append(items[1])
    totalRoundsScore = list()
    for items in answer:
        totalRoundsScore.append(items[2])

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    你让这个变得比它需要的更复杂。

    首先,我不明白您为什么要使用单独的列表。如果你有一个单一的玩家列表,你可以使用一个键功能非常简单地对它们进行排序:

    players.sort(key=lambda p: float(p[1]) / float(p[2]))
    

    但是,您根本不应该在 Python 中这样做。进行排序的最佳位置是在数据库中:

    SELECT name, totalGross, totalRounds ORDER BY totalGross/totalRounds
    

    与您之前的问题一样,学习一些基本的 SQL 似乎对您有所帮助。

    【讨论】:

    • 我认为他可能需要在查询中将这些转换为十进制(+1 都是一样的)否则他会得到截断的整数,我怀疑这会弄乱排序
    • 是的,我对 SQL 了解不多。这是一堂课,我们应该主要是自学,但我很难理解它。我没有意识到你可以在语句中做实际的除法。
    【解决方案2】:
    cursor.execute('select name, totalGross, totalRounds from players')
    answer= cursor.fetchall()
    
    print sorted(answer,key=lambda x:float(x[1])/float(x[2]))
    

    我认为会起作用...我不知道,但您也许可以制作查询来为您排序

    在旁注中,在您的情况下,更容易将 col1,col2,col3 = zip(*big_list) 之类的列分开,这将是

    players,grosses,rounds = zip(*answer)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2021-12-11
      相关资源
      最近更新 更多