SQLAlchemy error MySQL server has gone away

前端 未结 6 2089
清酒与你
清酒与你 2021-02-05 07:58

Error OperationalError: (OperationalError) (2006, \'MySQL server has gone away\') i\'m already received this error when i coded project on Flask, but i cant underst

6条回答
  •  伪装坚强ぢ
    2021-02-05 08:35

    SQLAlchemy now has a great write-up on how you can use pinging to be pessimistic about your connection's freshness:

    http://docs.sqlalchemy.org/en/latest/core/pooling.html#disconnect-handling-pessimistic

    From there,

    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()
    

    And a test to make sure the above works:

    from sqlalchemy import create_engine
    e = create_engine("mysql://scott:tiger@localhost/test", echo_pool=True)
    c1 = e.connect()
    c2 = e.connect()
    c3 = e.connect()
    c1.close()
    c2.close()
    c3.close()
    
    # pool size is now three.
    
    print "Restart the server"
    raw_input()
    
    for i in xrange(10):
        c = e.connect()
        print c.execute("select 1").fetchall()
        c.close()
    

提交回复
热议问题