pyodbc UPDATE抛出异常

时间:2017-02-01 21:24:25

标签: python azure pyodbc

我正在制作一个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")

1 个答案:

答案 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))