Quando tentei utilizar esta combinação, seguindo justamente o howto do site do Flask, me ocorria um erro depois de um tempo em que a conexão não era utilizada:
SqlAlchemy: SQLError: (OperationalError) (2006, ‘MySQL server has gone away’)
E como resolver isto ? Em vários posts por ai vi o pessoal utilizando-se da configuração “pool_recycle” para deixar a conexão mais tempo no ar, tentando colocar a conexão na sessão, e tudo mais… nada funcionou!
Só consegui resolver isto do modo pessimista, adicionando o seguinte código no database.py:
from sqlalchemy import exc
from sqlalchemy import event
from sqlalchemy.pool import Pool
@event.listens_for(Pool, "checkout")
def ping_connection(dbapi_connection, connection_record, connection_proxy):
cursor = dbapi_connection.cursor()
try:
cursor.execute("SELECT 1")
except:
# optional - dispose the whole pool
# instead of invalidating one at a time
# connection_proxy._pool.dispose()
# raise DisconnectionError - pool will try
# connecting again up to three times before raising.
raise exc.DisconnectionError()
cursor.close()
E voialá ! Funcionou !…