Home » Flask 技巧 » MySQL gone away问题的解决方法
  • 28
  • 08月

在云引擎BAE/SAE中,MySQL连接超时时间比较短,一般为30s,而不是默认的8小时,所以你需要在代码中检查是否超时,是否需要重连。

对于使用sqlalchemy的用户,需要在请求处理结束时调用 db.session.close() ,关闭当前 session ,将mysql连接还给连接池,并且将连接池的连接recyle时间设的小一点(推荐为10s)。

关键代码如下:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
app.config['SQLALCHEMY_POOL_RECYCLE'] = 10

db = SQLAlchemy(app)

@app.teardown_request
def teardown_request(response_or_exc):
    db.session.remove()