2011-01-10 26 views
6

Tenemos un servidor de base de datos poco fiable, por diversas razones, y como consecuencia, a veces las conexiones de la base de datos utilizadas por mi aplicación se desvanecen. Las conexiones son SQLAlchemy 0.6.5 conexiones a un PostgreSQL db en un Pylons 1.0 web runtime.¿Cómo puedo verificar las conexiones agrupadas en SQLAlchemy antes de entregarlas a mi código de aplicación?

Lo que quiero es una forma de detectar más de estos sin un error visible por el usuario; idealmente, probaría la conexión en el nivel de la piscina antes de devolverla desde el motor. Yo controlo la creación del motor, así que estoy bien allí.

¿Cuál es la mejor (más idónea/limpia) forma de lograr esto? Me doy cuenta de que siempre habrá la posibilidad de que la conexión muera entre el cheque y el uso, pero eso será bastante raro en este entorno y, por lo tanto, no me concierne.

Respuesta

4

se puede utilizar una piscina oyente:

class ConnectionChecker(sqlalchemy.interfaces.PoolListener): 
    def checkout(self, dbapi_con, con_record, con_proxy): 
     if not is_valid_connection(dbapi_con): 
      # a new connection will be used 
      raise sqlalchemy.exc.DisconnectionError 

izquierda para usted es cómo implementar is_valid_connection para su caso de uso.

Cuestiones relacionadas