Как я могу проверить пул соединений в SQLAlchemy, прежде чем передать их в код моего приложения? - PullRequest
6 голосов
/ 10 января 2011

У нас несколько ненадежный сервер баз данных по разным причинам, и, как следствие, иногда соединения с базами данных, используемые моим приложением, исчезают из-под него. Соединения - это соединения SQLAlchemy 0.6.5 с базой данных PostgreSQL в веб-среде Pylons 1.0.

Мне нужен какой-то способ поймать большинство из них без видимой пользователем ошибки; в идеале я бы проверил соединение на уровне пула, прежде чем вернуть его из двигателя. Я контролирую создание двигателя, так что я в порядке там.

Какой самый лучший (самый нелепый / самый чистый) способ сделать это? Я понимаю, что всегда будет возможность исчезнуть связь между проверкой и использованием, но это будет довольно редко в этой среде, и поэтому я не беспокоюсь.

1 Ответ

4 голосов
/ 10 января 2011

Вы можете использовать слушателя пула:

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 

Вам остается только реализовать is_valid_connection для вашего варианта использования.

...