对python进行排序和排序,并使用python写回MySQL

对python进行排序和排序,并使用python写回MySQL,python,mysql-python,Python,Mysql Python,我使用python从MySQL读取值,然后对列表进行排序。然后我需要对列表进行排序,并将其写回MySQL。我的代码是 获取列表 cursor.execute ("SELECT winnings, user, rank FROM round_lb WHERE r_id = 5") round_test = cursor.fetchall() 返回 ((90L, 70L, 0L), (17L, 1L, 0L), (25L, 78L, 0L)) 排序列表(因此最高奖金列在第一位) 我现在想给ran

我使用python从MySQL读取值,然后对列表进行排序。然后我需要对列表进行排序,并将其写回MySQL。我的代码是

获取列表

cursor.execute ("SELECT winnings, user, rank FROM round_lb WHERE r_id = 5")
round_test = cursor.fetchall()
返回

((90L, 70L, 0L), (17L, 1L, 0L), (25L, 78L, 0L))
排序列表(因此最高奖金列在第一位)

我现在想给rank字段赋值,所以90是rank1,25是rank2,17是rank3等等


这就是我被卡住的地方。。有人知道用python对它们进行排序的简单方法吗。。。因此,我可以将它们写回MySQL…

如果您只需要顺序排序,那么它已经位于列表中元组的位置:

sorted_list = sorted(round_test, reverse =True)
# [(90L, 70L, 0L), (25L, 78L, 0L), (17L, 1L, 0L)]
ranked_list = []
for position, row in enumerate(sorted_list):
    ranked_list.append(tuple(row[0:2] + [position])) # replaces the 3rd row member
# ranked_list
# [(90L, 70L, 1), (25L, 78L, 2), (17L, 1L, 3)]

如果您只需要顺序排序,那么它已经位于列表中元组的位置:

sorted_list = sorted(round_test, reverse =True)
# [(90L, 70L, 0L), (25L, 78L, 0L), (17L, 1L, 0L)]
ranked_list = []
for position, row in enumerate(sorted_list):
    ranked_list.append(tuple(row[0:2] + [position])) # replaces the 3rd row member
# ranked_list
# [(90L, 70L, 1), (25L, 78L, 2), (17L, 1L, 3)]
  • enumerate(rows,start=1)
    返回(rank,row)的元组列表,从
    1开始
  • 行[:-1]
    从行中提取除最后一项以外的所有项目(有效地将旧列组分条)
  • 行[:-1]+(秩,)
    连接行的第一个项和包含秩的1元组

如果你打算替换它,为什么要选择它呢

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(sorted(rows, reverse=True), start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)

为什么不在MySQL中对它们进行排序

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5 ORDER BY winnings DESC")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(rows, start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)
  • enumerate(rows,start=1)
    返回(rank,row)的元组列表,从
    1开始
  • 行[:-1]
    从行中提取除最后一项以外的所有项目(有效地将旧列组分条)
  • 行[:-1]+(秩,)
    连接行的第一个项和包含秩的1元组

如果你打算替换它,为什么要选择它呢

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(sorted(rows, reverse=True), start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)

为什么不在MySQL中对它们进行排序

cursor.execute ("SELECT winnings, user FROM round_lb WHERE r_id = 5 ORDER BY winnings DESC")
rows = cursor.fetchall()
for rank, (winnings, user) in enumerate(rows, start=1):
    params = (winnings, user, rank)
    cursor.execute("INSERT INTO round_lb (winnings, user, rank) VALUES (%s, %s, %s)", params)

嗨,Pavel,谢谢你的帮助,我没想到在MySQL中会这样排序,这似乎是一个更优雅的解决方案!再次感谢!嗨,Pavel,谢谢你的帮助,我没想到在MySQL中会这样排序,这似乎是一个更优雅的解决方案!再次感谢!