2011-01-10 7 views
6

Abbiamo un server di database un po 'inaffidabile, per vari motivi, e di conseguenza a volte le connessioni del database utilizzate dalla mia applicazione spariscono da sotto di esso. Le connessioni sono le connessioni SQLAlchemy 0.6.5 a un db PostgreSQL in un runtime Web di Pylons 1.0.Come posso controllare le connessioni in pool in SQLAlchemy prima di passarle al mio codice applicazione?

Quello che voglio è un modo per catturare la maggior parte di di questi senza un errore visibile dall'utente; idealmente, testerei la connessione a livello di piscina prima di restituirla dal motore. Controllo la creazione del motore, quindi sto bene lì.

Qual è il modo migliore (più idonea/più pulito) per realizzare questo? Mi rendo conto che ci sarà sempre la possibilità che la connessione muoia tra il controllo e l'utilizzo, ma questo sarà piuttosto raro in questo ambiente e quindi non è una preoccupazione per me.

risposta

4

è possibile utilizzare una piscina ascoltatore:

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 

Sinistra per te è come implementare is_valid_connection per il vostro caso d'uso.

Problemi correlati