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

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s