5

Sto usando Python/Bottle/SqlAlchemy/MySQL per un servizio web.non riesce a catturare MySQL IntegrityError in Python

Sto tentando di rilevare un errore di integrità generato chiamando una stored procedure ma non riesco a farlo.

Usando questo

cursor = connection.cursor() 
cursor.callproc('my_stored_proc', [arguments]) 

produce lo stesso risultato come

try: 
    cursor = connection.cursor() 
    cursor.callproc('my_stored_proc', [arguments]) 
except IntegrityError as e: 
    print("Error: {}".format(e)) 
    return {"message": e.message} 

ottengo un'eccezione IntegrityError in entrambi i casi. Perché l'eccezione non viene catturata in quest'ultimo caso?

+0

Come/quando stai commettendo la transazione? L'errore "IntegrityError" verrà probabilmente generato quando la transazione viene eseguita, non quando si chiama la stored procedure. –

risposta

10

Il problema era che stavo rilevando un'eccezione errata.

Si è scoperto che l'errore generato è in realtà di tipo pymysql.err.IntegrityError e non sqlalchemy.exc.IntegrityError come ho ipotizzato.

ho scoperto il tipo di eccezione facendo:

import sys 
try: 
    cursor = connection.cursor() 
    cursor.callproc('my_stored_proc', [arguments]) 
except: 
    print "Unexpected error:", sys.exc_info()[0] 

E ho visto questo stampa:

Unexpected error: <class 'pymysql.err.IntegrityError'>

+0

Questo è fantastico .. –