【问题标题】:pyodbc UPDATE throws an exceptionpyodbc UPDATE 抛出异常
【发布时间】:2017-02-01 21:24:24
【问题描述】:

我正在制作一个 Python 程序,用于为 Azure SQL 数据库进行 Elo 计算。问题在于最后两个“cursor.execute”命令(更新)。

我在发布之前取出了部分代码以使其更小,但所有变量都从 find_winner 和 find_loser 方法正确传递——打印命令显示正确的值。

当我按原样运行程序时,它会打印评级的变化和来自 except 块的消息。当我注释掉 UPDATE 方法时,它不会打印异常消息。我能想到的唯一原因是 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")

【问题讨论】:

  • 异常信息是什么?
  • 糟糕,不是异常消息。它只是打印来自 except 块的消息。
  • 所以捕获异常并打印消息。

标签: python azure pyodbc


【解决方案1】:

这是正确的语法:

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

【讨论】:

  • 这是我尝试过的迭代之一。 gyazo.com/5314456156ede0b019f48bb6f831a166 这是我运行该代码时发生的屏幕截图。
  • 没有错误信息。我实际上不知道如何更改 except 块以显示错误类型
  • 好的,我已将其添加到我的答案中。
  • ('参数类型无效。param-index=0 param-type=StringVar', 'HY105')
  • 您的winner_new_ratingwinner_id 变量是字符串还是数字?
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2011-02-25
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多