[英]SQLIte3 querying a database
我正在尝试编写一个程序来查询数据库。 该数据库是golfDB,它包含一个表,该表称为5个字段的players
:
name
(玩家的名字) totalGross
(每轮总得分的总和) totalRounds
(打的回合数) pars
(总票数) birdies
(总小鸟数) 我的程序需要输出标准杆最多的球员,输入球员的平均得分(totalGross / totalRounds),并以总得分的顺序列出球员(从最低到最高)。
我真的不确定如何输出具有最多参数的播放器。 现在我所拥有的代码正在输出一个列表列表,每个列表都有一个播放器及其参数。 我不确定如何按照他们的标准杆排序,然后选择最高的标准杆,因为我尝试过的一切只是选择数字,然后我无法回到他们属于哪个球员的位置。
有谁知道如何仅按参数数量对列表列表进行排序,然后就可以打印播放器了?
import sqlite3
def getDBCursor(DB):
"""obtain and return a cursor for the database DB"""
conn= sqlite3.connect('/Users/tinydancer9454/Documents/python/golfDB')
cursor= conn.cursor()
return cursor
def queryDBpars(cursor):
"""find out which player had the most pars"""
cursor.execute('select name, pars from players where pars >= 0')
playerPars= cursor.fetchall()
def queryDBavgScore(cursor):
"""find the average score of inputed player"""
player= input("Please enter the player's name: ")
cursor.execute('select totalGross from players where name = ?', (player,))
totalGrossScore = cursor.fetchone()
cursor.execute('select totalRounds from players where name = ?', (player,))
totalRoundsScore = cursor.fetchone()
answer = totalGrossScore[0]/ totalRoundsScore[0]
print('The average score for', player, 'is', answer,)
def queryDBplayers(cursor):
"""lists the players in order of their total gross score"""
def main():
"""obtain cursor and query the database: golfDB"""
cursor= getDBCursor('golfDB')
queryDBpars(cursor)
queryDBavgScore(cursor)
queryDBplayers(cursor)
cursor.close()
这是输出:
[('Ruth', 16), ('Elena', 12), ('Jane', 12), ('Ezgi', 13), ('Ricki', 9), ('Margaret', 10), ('Rosalia', 16), ('Betty', 14)]
这是一个简单的SQL问题。 对于您的问题的直接答案,您只需要:
SELECT name, pars FROM players WHERE pars >= 0 ORDER BY pars DESC
但这仍然让您选择不需要的所有球员。 为了防止这种情况,只需添加一个LIMIT子句:
SELECT name, pars FROM players WHERE pars >= 0 ORDER BY pars DESC LIMIT 1
然后,您将使用cursor.fetchone()
获得该单行。
编辑
您说可能有不止一个人拥有最多的票。 这使查询变得更加复杂:现在我们进入子查询:
SELECT name, pars FROM players WHERE pars >= 0 WHERE pars = (
SELECT MAX(pars) FROM players)
因此,这是在查找“ pars”的最大值,然后选择具有该值的行。
您可以在查询中使用ORDER BY SQL关键字,或者如果要在python中执行此操作,则可以采用以下两种方法:
def queryPars(cursor):
"""find out which player had the most pars"""
cursor.execute('select pars, name from players where pars >= 0')
## Note flipped order ^^^^^^^^^^^^
playerPars = cursor.fetchall()
pars, player_most_pars = max(playerPars)
# Now do something useful with it ;-)
该文档描述了如何比较元组。 (基本上是逐项输入)。 如果您无法更改查询的顺序,则还可以执行player, pars = max(playerPars, key=lambda p: p[1])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.