2017-02-01 6 views
1

Ich mache ein Python-Programm, das Elo-Berechnungen für eine Azure SQL-Datenbank durchführt. Das Problem ist mit den letzten zwei 'cursor.execute' Befehlen (den UPDATEs).pyodbc UPDATE löst eine Ausnahme aus

Ich habe einen Teil des Codes vor dem Posten hier herausgenommen, um es kleiner zu machen, aber alle Variablen werden richtig von den Methoden find_winner und find_loser übergeben - die Druckbefehle zeigen den richtigen Wert.

Wenn ich das Programm wie es ist ausführen, druckt es die Änderung der Bewertungen und der Nachricht aus dem Block außer. Wenn ich die UPDATE-Methoden auskommentiere, wird die Nachricht except nicht gedruckt. Der einzige Grund, warum ich dazu komme, ist, dass die Variablen aus dem Tupel von find_winner und find_loser nicht richtig in die SQL-Anweisung eingetragen werden.

Ich habe versucht, es mit zu laufen? und '% s' anstelle von winner_new_rating und winner_id, aber keine der 3 Versionen funktionierte.

Gibt es etwas Offensichtliches, das ich vermisse? Wie können Parameter, die in Variablen gespeichert sind, korrekt eingegeben werden?

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

Was ist die Ausnahmemeldung? –

+0

Hoppla, keine Ausnahme. Es druckt nur die Nachricht aus dem Ausnahmeblock. – user3364161

+0

So fangen Sie die Ausnahme und drucken Sie die Nachricht. –

Antwort

3

Dies ist die korrekte Syntax:

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

Das ist eine der Wiederholungen, die ich ausprobiert habe. https://gyazo.com/5314456156ede0b019f48bb6f831a166 Hier ist ein Screenshot von was passiert, wenn ich diesen Code ausführen. – user3364161

+0

OK, was ist die Ausnahme Fehlermeldung? –

+0

Es gibt keine Fehlermeldung. Ich weiß nicht wirklich, wie man den Ausnahmeblock ändert, um die Art des Fehlers anzuzeigen – user3364161

Verwandte Themen