Ошибка SQLAlchemy OperationalError не получена - PullRequest
0 голосов
/ 06 августа 2020

Поскольку нам нужно использовать разные URL-адреса для доступа к нашей БД для внутреннего и внешнего использования, я реализовал следующий код. Проблема в том, что поднятая OperationalError не извлекается предложением try / except . Почему эта ошибка не загружается?

try:
    return create_engine('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
            dbname="db_name",
            user="username",
            host="internal_url.com",
            port=1234,
            password="PassWord"))
except exc.OperationalError:
    return create_engine('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
            dbname="db_name",
            user="username",
            host="external_url.com",
            port=1234,
            password="PassWord"))

1 Ответ

0 голосов
/ 06 августа 2020

create_engine только создает экземпляр, но не устанавливает соединение. Вам необходимо подключиться к базе данных, чтобы проверить, действительно ли соединение. Примерно так

try:
    engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
            dbname="db_name",
            user="username",
            host="internal_url.com",
            port=1234,
            password="PassWord"))
    engine.connect()
    return engine
except sqlalchemy.exc.OperationalError:
    return create_engine('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
            dbname="db_name",
            user="username",
            host="external_url.com",
            port=1234,
            password="PassWord"))
...