使用 Python,如何捕获 MySQL LOCK 错误但引发所有其他错误?
Using Python, how to you catch MySQL LOCK errors but raise all others?
我正在使用 Python 更新 MySQL 数据库。我的脚本的许多实例一次可以 运行,所以偶尔我会从 MySQL 服务器收到 LOCK 错误消息:
mysql.connector.errors.DatabaseError: 1205 (HY000): 超过锁定等待超时;尝试重新启动事务
如果出现这些情况,我想重试操作。我可以使用基本的 except Exception as e 语句,但这会捕获所有错误,这不是我需要的。
如何只捕获 MySQL 生成的 LOCK 错误?
cursor = mysql.connector.connect(host="myhost.com", user=username, passwd=password, db=schema, auth_plugin='mysql_native_password')
sql = "UPDATE table SET mycolumn = 'mydata'"
while True:
try:
cursor.execute(sql)
break
except Exception as e: # I only want to catch LOCK errors here
print(repr(e))
except:
print(sql)
raise
您可以提取错误代码并根据它执行某些操作。 pymysql
模块的示例,供您使用 - 请参阅文档。
import pymysql
from pymysql.err import DatabaseError
try:
mydb = pymysql.connect(
host = "127.0.0.1",
port = 123123,
user = "user id",
password = "!!!!!!!"
)
except DatabaseError as e:
err_code = e.args[0]
if err_code == 2003:
print('bad connection string')
else:
raise
输出:
bad connection string
错误编号为 1205
所以抓住这个号码
import mysql.connector
from mysql.connector import errorcode
cursor = mysql.connector.connect(host="myhost.com", user=username, passwd=password, db=schema, auth_plugin='mysql_native_password')
sql = "UPDATE table SET mycolumn = 'mydata'"
while True:
try:
cursor.execute(sql)
break
if err.errno == 1205 :
print("Lock wait timeout exceeded")
else:
print(sql)
raise
我正在使用 Python 更新 MySQL 数据库。我的脚本的许多实例一次可以 运行,所以偶尔我会从 MySQL 服务器收到 LOCK 错误消息:
mysql.connector.errors.DatabaseError: 1205 (HY000): 超过锁定等待超时;尝试重新启动事务
如果出现这些情况,我想重试操作。我可以使用基本的 except Exception as e 语句,但这会捕获所有错误,这不是我需要的。
如何只捕获 MySQL 生成的 LOCK 错误?
cursor = mysql.connector.connect(host="myhost.com", user=username, passwd=password, db=schema, auth_plugin='mysql_native_password')
sql = "UPDATE table SET mycolumn = 'mydata'"
while True:
try:
cursor.execute(sql)
break
except Exception as e: # I only want to catch LOCK errors here
print(repr(e))
except:
print(sql)
raise
您可以提取错误代码并根据它执行某些操作。 pymysql
模块的示例,供您使用 - 请参阅文档。
import pymysql
from pymysql.err import DatabaseError
try:
mydb = pymysql.connect(
host = "127.0.0.1",
port = 123123,
user = "user id",
password = "!!!!!!!"
)
except DatabaseError as e:
err_code = e.args[0]
if err_code == 2003:
print('bad connection string')
else:
raise
输出:
bad connection string
错误编号为 1205
所以抓住这个号码
import mysql.connector
from mysql.connector import errorcode
cursor = mysql.connector.connect(host="myhost.com", user=username, passwd=password, db=schema, auth_plugin='mysql_native_password')
sql = "UPDATE table SET mycolumn = 'mydata'"
while True:
try:
cursor.execute(sql)
break
if err.errno == 1205 :
print("Lock wait timeout exceeded")
else:
print(sql)
raise