Arquivo da categoria: flask

Utilizando o SQLAlchemy no Flask com MySQL

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 !…