【发布时间】:2020-01-23 02:40:59
【问题描述】:
我没能找到很多关于这个,但我也不确定如何搜索它,所以如果这是重复的,我很抱歉。
目前,我有大量代码,偶尔会出现 mySQL 查询。有时,由于某种原因,mySQL 连接(在程序启动时实例化并可供想要使用它的方法访问,因此不会不断建立新连接)会失败。例如,这是一个可能引发的异常:
mysql.connector.errors.OperationalError: MySQL Connection not available.
当引发异常时,我希望程序尝试重新建立与数据库的连接,如果失败,发送警报(通过 OpsGenie、电子邮件等)。这是非常微不足道的,而不是我正在努力解决的部分。
现在,我在整个程序中都在考虑如何做到这一点,并且我知道我可以将每个 mySQL 查询语句包装在一个 try...catch... 中,但是我觉得这可能会很混乱且效率低下.我想知道是否有一种方法可以:
- 覆盖 mySQL 包中的异常处理程序以包含执行上述操作的代码,或者
- 创建某种“全局”try...catch... 语句(实际上并未将整个程序包装在 try...catch... 中),它将捕获任何 mySQL 连接异常并按上述方式处理它们(也许使用方法装饰器?)
哪个更有效或更合适(如果有的话)。
非常感谢您的见解和想法。
注意:我在这个项目中使用 Python 3。
更新
我是这样解决这个问题的:
#method
def getNewCursor():
try:
return(db.cursor())
except OperationalError:
#handle error...
#in practice
cur = getNewCursor()
cur.execute("...the SQL query...")
... etc
我这样做而不是创建一个方法来处理整个查询,这样我就可以获取一个游标对象并根据需要使用它,因为创建新游标时会出现连接错误。
【问题讨论】:
标签: python mysql python-3.x oop exception