Python更新SQL DB

时间:2019-03-09 14:36:40

标签: python sql

有一个程序,该程序可接收玩家名称和结果列表。然后尝试将它们添加到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”,但是我不确定如何再告诉它我要在此处使用什么值。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以简单地使用以下表达式:

INSERT INTO results (Player, Score)
    VALUES (%s, %s)
    ON DUPLICATE KEY UPDATE Score = VALUES(Score) + Score;

注意:

  • 这假定您在Player上具有唯一索引(或者更好的是,它是主键)。
  • 您应该学习使用SQL参数来传递值,而不是字符串替换。
  • 您可能需要声明ScoreNOT 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])