我正在制作一个python程序,为Azure SQL数据库执行Elo计算。问题出在最后两个"cursor.execute"命令(UPDATEs)上。
在这里发布之前,我取出了部分代码以使其更小,但是所有变量都从find_winner和find_loser方法正确传递 - 打印命令显示正确的值。
当我按原样运行程序时,它会打印评级的变化和来自 except 块的消息。当我注释掉 UPDATE 方法时,它不会打印 except 消息。我能想出的唯一原因是来自find_winner和find_loser元组的变量没有正确输入到 SQL 语句中。
我尝试使用 ? 和"%s"而不是 winner_new_rating 和 winner_id 运行它,但 3 个版本都不起作用。
我缺少什么明显的东西吗?输入存储在变量中的参数的正确方法是什么?
def rate():
try:
(winner_rating,winner_name,winner_id) = find_winner()
(loser_rating,loser_name,loser_id) = find_loser()
cursor = conn.cursor()
print(winner_name, "wins", winner_rating, "-->", winner_new_rating)
print(loser_name, "loses:", loser_rating, "-->", loser_new_rating)
cursor.execute("UPDATE KIDS SET Rating = winner_new_rating WHERE LocalID = winner_id")
cursor.execute("UPDATE KIDS SET Rating = loser_new_rating WHERE LocalID = loser_id")
conn.commit()
except:
print("Rate method error")
这是正确的语法:
try:
cursor.execute("UPDATE KIDS SET Rating = ? WHERE LocalID = ?",
str(winner_new_rating), winner_id)
cursor.execute("UPDATE KIDS SET Rating = ? WHERE LocalID = ?",
str(loser_new_rating), loser_id)
except DatabaseError as e:
print(str(e))