簡體   English   中英

Python更新SQL DB

[英]Python updating a sql DB

有一個程序可以接收播放器名稱和結果的列表。 然后嘗試將它們添加到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”,但是我不確定如何再告訴它我要在此處使用什么值。 任何建議將不勝感激。

您可以簡單地使用以下表達式:

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])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM