Как мне подключиться к Postgresql, используя SSL от SqlAchemy+pg8000?

Подключение к postgres через pg8000 из SqlAlchemy работало нормально, пока я не включил SSL на postgres.

db = create_engine('postgresql+pg8000://user:pass@hostname/dbname', echo=True).connect()

Теперь, похоже, с ошибкой:

File "/Library/Python/2.7/site-packages/pg8000/core.py", line 872, in __init__
raise InterfaceError("communication error", exc_info()[1])
sqlalchemy.exc.InterfaceError: (InterfaceError) ('communication error', error(61, 'Connection refused')) None None

3 ответа

Решение

Вероятно, вам нужно добавить dict: connect_args:

db = create_engine('postgresql+pg8000://user:pass@hostname/dbname', connect_args={'sslmode':'require'}, echo=True).connect()

Принятый ответ больше не работает, по крайней мере, с этими версиями:

      Python                   3.9
pg8000                   1.19.5
SQLAlchemy               1.4.12

вместо этого используйте

      engine = create_engine('postgresql+pg8000://user:password@host/db', 
                       connect_args={'ssl_context': True})

который передает результат ssl.create_default_context() создателю соединения. Если требуется настраиваемый контекст SSL, передайте его как значение вместо True:

      import ssl

ssl_context = ssl.SSLContext()
# Set attributes as required  ...

engine = create_engine('postgresql+pg8000://user:password@host/db', 
                       connect_args={'ssl_context': ssl_context})

У меня не получилось ... Я использовал:

      engine = create_engine('postgresql+pg8000://user:password@host/db', connect_args={'ssl': {'ssl-mode': 'required'}})
Другие вопросы по тегам