我使用Python / Bottle / SqlAlchemy / MySQL作为网络服务。
我试图通过调用存储过程来捕获IntegrityError,但我无法做到。
使用此
cursor = connection.cursor()
cursor.callproc('my_stored_proc', [arguments])
产生与
相同的结果try:
cursor = connection.cursor()
cursor.callproc('my_stored_proc', [arguments])
except IntegrityError as e:
print("Error: {}".format(e))
return {"message": e.message}
在这两种情况下我都会遇到IntegrityError异常。为什么在后一种情况下没有发现异常?
答案 0 :(得分:10)
问题是我遇到了错误的异常。
事实证明,引发的错误实际上是pymysql.err.IntegrityError类型,而不是我假设的sqlalchemy.exc.IntegrityError。
我通过执行以下方式找到了异常类型:
import sys
try:
cursor = connection.cursor()
cursor.callproc('my_stored_proc', [arguments])
except:
print "Unexpected error:", sys.exc_info()[0]
我看到了这个打印输出:
Unexpected error: <class 'pymysql.err.IntegrityError'>
答案 1 :(得分:0)
就我而言,也是您自己,您将使用sqlalchemy对象:
try:
cursor = connection.cursor()
cursor.callproc('my_stored_proc', [arguments])
except sqlalchemy.exc.IntegrityError as e:
print("Error: {}".format(e))
return {"message": e.message}
答案 2 :(得分:0)
就我而言,也许对您也有帮助,我使用MYSQL作为数据库,因此要捕获异常,我需要导入异常
from django.db.utils import IntegrityError
然后您可以尝试像这样捕获它
try:
#your code
except IntegrityError:
#your code when integrity error comes