pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection
Posted
技术标签:
【中文标题】pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, \'Connection timed out\'))")【英文标题】:pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))") 【发布时间】:2020-07-19 07:26:43 【问题描述】:如果遇到任何错误,我的问题是关于重新连接到 mysql 服务器。
我正在连接到 Flask 中的 MySQL 服务器:
connection = pymysql.connect(host='host',
user='user',
connect_timeout= 31536000,
password='passwd',
db='db_name',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
对于使用游标的查询也是如此: Flask 路由代码:
@app.route("/chart", methods=['GET', 'POST'])
def chart():
try:
with connection.cursor() as cursor:
#line chart open tickets
query = "select createdDate,rootCause,requestId from db_name;"
df = pd.read_sql(query, connection)
print(df)
except pymysql.MySQLError as e:
print(e)
当我收到错误时,我想重新连接到数据库:
pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection timed out'))")
请帮我找到这个错误的解决方案。
遇到任何错误时如何重新连接到数据库。
提前致谢!
【问题讨论】:
【参考方案1】:看起来您一直在使用单个连接。尝试每次创建一个新连接,并在运行所需的查询后关闭它。 通过这个可以避免这个问题。
【讨论】:
【参考方案2】:在调用create_engine()
时设置pool_pre_ping=True
似乎对我有很大帮助。
例子:
engine = create_engine(db_connection, pool_pre_ping=True)
来自SQLAlchemy docspool_pre_ping
:
“如果 True 将启用连接池“pre-ping”功能,该功能会在每次结帐时测试连接的活跃度。”
【讨论】:
以上是关于pymysql.err.OperationalError: (2006, "MySQL server has gone away (TimeoutError(110, 'Connection的主要内容,如果未能解决你的问题,请参考以下文章