2017-02-01 6 views
1

私はAzure SQLデータベースのElo計算を行うPythonプログラムを作成しています。問題は最後の2つの 'cursor.execute'コマンド(UPDATE)にあります。pyodbc UPDATEが例外をスローする

私はここに投稿する前にコードを取り出して小さくしましたが、すべての変数がfind_winnerメソッドとfind_loserメソッドから正しく渡されました。つまり、printコマンドは正しい値を示しています。

私はプログラムをそのまま実行すると、格付けの変更と例外ブロックからのメッセージを出力します。私がUPDATEメソッドをコメントアウトするとき、それはexceptメッセージを出力しません。私が思いつくことができる唯一の理由は、find_winnerとfind_loserからのタプルの変数がSQL文に正しく入力されていないことです。

私はそれを実行しようとした? winner_new_ratingとwinner_idの代わりに '%s'を使用しましたが、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

例外メッセージとは何ですか? –

+0

例外メッセージではありません。それはexceptブロックからメッセージを出力するだけです。 – user3364161

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

これは私が試した反復の1つです。 https://gyazo.com/5314456156ede0b019f48bb6f831a166 このコードを実行するとどうなるかのスクリーンショットがあります。 – user3364161

+0

OK例外エラーメッセージは何ですか? –

+0

エラーメッセージはありません。私は実際にエラーの種類を表示するために例外ブロックを変更する方法を知っていません – user3364161

関連する問題