Gam*_*ion 7 python sqlalchemy python-db-api
我试图捕获mysql/sqlalchemy OperationalErrors并替换句柄访问被拒绝(1045)与连接被拒绝(2003)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user … (Background on this error at: http://sqlalche.me/e/e3q8)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)") (Background on this error at: http://sqlalche.me/e/e3q8)
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到任何关于如何以编程方式区分这些文档的文档.我潜入了资源,并认为我可以检查err.orig.original_exception.errno的值,但事实并非如此.
编辑:似乎没有为访问被拒绝定义err.orig,这可能是一个错误.
try:
engine.scalar(select([1]))
except sqlalchemy.exc.OperationalError as err:
if err_______:
print("Access Denied")
elifif err_______:
print("Connection Refused")
else:
raise
Run Code Online (Sandbox Code Playgroud)
这个问题确实让我感到烦恼,甚至连赏金都没有消息.我开始相信它必须是sqlalchemy中的一个错误,但sqlalchemy文档在这方面并不是很具描述性,而且我对sqlalchemy和python很新,所以我真的很难说.我也找不到对irc的支持,我从哪里开始?
经过更多研究,我发现 mysql 错误代码位于err.orig.args[0]. 所以答案是:
try:
engine.scalar(select([1]))
except sqlalchemy.exc.OperationalError as err:
if err.orig.args[0]==1045:
print("Access Denied")
elif err.orig.args[0]==2003:
print("Connection Refused")
else:
raise
Run Code Online (Sandbox Code Playgroud)