pyodbc UPDATE 抛出异常
pyodbc UPDATE throws an exception
我正在制作一个 python 程序来为 Azure SQL 数据库进行 Elo 计算。问题出在最后两个 'cursor.execute' 命令(更新)。
我在此处发布之前删除了部分代码以使其更小,但是所有变量都正确地从 find_winner 和 find_loser 方法传递——打印命令显示正确的值.
当我按原样运行程序时,它会打印评级的变化和来自 except 块的消息。当我注释掉 UPDATE 方法时,它不会打印 except 消息。我能想到的唯一原因是来自 find_winner 和 find_loser 的元组中的变量没有正确输入到 SQL 语句中。
我试过 运行用 ?和“%s”而不是 winner_new_rating 和 winner_id,但是 3 个版本中的 none 有效。
我有什么明显的遗漏吗?输入存储在变量中的参数的正确方法是什么?
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))
我正在制作一个 python 程序来为 Azure SQL 数据库进行 Elo 计算。问题出在最后两个 'cursor.execute' 命令(更新)。
我在此处发布之前删除了部分代码以使其更小,但是所有变量都正确地从 find_winner 和 find_loser 方法传递——打印命令显示正确的值.
当我按原样运行程序时,它会打印评级的变化和来自 except 块的消息。当我注释掉 UPDATE 方法时,它不会打印 except 消息。我能想到的唯一原因是来自 find_winner 和 find_loser 的元组中的变量没有正确输入到 SQL 语句中。
我试过 运行用 ?和“%s”而不是 winner_new_rating 和 winner_id,但是 3 个版本中的 none 有效。
我有什么明显的遗漏吗?输入存储在变量中的参数的正确方法是什么?
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))