我正在制作一个python程序,用于对Azure SQL数据库进行Elo计算。问题出在最后两个'cursor.execute'命令(UPDATEs)。
我在发布之前取出了部分代码以使其变小,但所有变量都从find_winner和find_loser方法正确传递 - print命令显示正确的值。
当我按原样运行程序时,它会打印评级的变化以及来自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")
答案 0 :(得分:3)
这是正确的语法:
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))