Python更新sql数据库

2024-05-14 18:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个程序可以接收球员名单和结果。然后尝试将它们添加到SQL数据库中。如果球员的名字已经在名单上,我希望它通过将那里的当前分数添加到存储的分数来更新那里的分数。我试图通过使用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”,但我不知道如何告诉它我想在那里使用什么值。如有任何建议,将不胜感激


Tags: keyconnectoronmysqlupdatecon分数score
2条回答

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

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

注:

  • 这假设您在Player上有一个唯一的索引(或者更好的是,它是主键)
  • 您应该学习使用SQL参数传递值,而不是字符串替换
  • 您可能希望将Score声明为NOT NULL,以确保它始终具有合理的值
 sql_insert_query = " INSERT INTO results (Player, Score) VALUES {0},{1}) ON DUPLICATE 
 KEY UPDATE Score = VALUES(Score) + {1}; ".format(playerNames[0],playerScore[1])

相关问题 更多 >

    热门问题