有一个程序,该程序可接收玩家名称和结果列表。然后尝试将它们添加到SQL DB。如果玩家名称已经在列表中,我希望它通过将当前分数添加到已存储的分数来在该分数处更新分数。我正在尝试通过使用ON DUPLICATE KEY UPDATE语句来执行此操作,但是我不确定如何告诉它使用该值。这是我的代码。
from mysql.connector.cursor import MySQLCursorPrepared
print(playerNames ,playerScore )
try:
#MariaDB Connection
con = mysql.connector.connect(port=5004,user='root',password='password',host='localhost',database='scoreboard')
records_to_insert = [ (playerNames[0],playerScore[0]) ,
(playerNames[1],playerScore[1]),
(playerNames[2],playerScore[2]) ,
(playerNames[3],playerScore[3])
]
sql_insert_query = " INSERT INTO results (Player, Score) VALUES (%s,%s) ON DUPLICATE KEY UPDATE Score = VALUES(Score) + %s; "
myCursor = con.cursor()
myCursor.executemany(sql_insert_query, records_to_insert)
con.commit()
我知道问题出在使用“ = VALUES(Score)+%s”,但是我不确定如何再告诉它我要在此处使用什么值。任何建议将不胜感激。
答案 0 :(得分:0)
您可以简单地使用以下表达式:
INSERT INTO results (Player, Score)
VALUES (%s, %s)
ON DUPLICATE KEY UPDATE Score = VALUES(Score) + Score;
注意:
Player
上具有唯一索引(或者更好的是,它是主键)。Score
为NOT NULL
,以确保其始终具有合理的值。答案 1 :(得分:-1)
sql_insert_query = " INSERT INTO results (Player, Score) VALUES {0},{1}) ON DUPLICATE
KEY UPDATE Score = VALUES(Score) + {1}; ".format(playerNames[0],playerScore[1])