查询sqlite3数据库

时间:2013-04-25 16:15:49

标签: python sqlite

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

  • 姓名(球员姓名)
  • totalGross(每轮总分的总和)
  • totalRounds(播放次数)
  • 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])

2 个答案:

答案 0 :(得分:3)

你使这个比它需要的更复杂。

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

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

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

SELECT name, totalGross, totalRounds ORDER BY totalGross/totalRounds

与上一个问题一样,您似乎可以从学习一些基本的SQL中受益。

答案 1 :(得分:0)

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)