sor*_*rin 2 python sqlalchemy pg8000
直到我在postgres上启用SSL之前,从SqlAlchemy通过pg8000连接到postgres都工作良好。
db = create_engine('postgresql+pg8000://user:pass@hostname/dbname', echo=True).connect()
Run Code Online (Sandbox Code Playgroud)
现在似乎失败了:
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
Run Code Online (Sandbox Code Playgroud)
接受的答案不再有效,至少对于这些版本:
Python 3.9
pg8000 1.19.5
SQLAlchemy 1.4.12
Run Code Online (Sandbox Code Playgroud)
pg8000 文档描述了您必须执行的操作。使用
engine = create_engine('postgresql+pg8000://user:password@host/db',
connect_args={'ssl_context': True})
Run Code Online (Sandbox Code Playgroud)
它将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})
Run Code Online (Sandbox Code Playgroud)
可能您需要添加connect_args字典:
db = create_engine('postgresql+pg8000://user:pass@hostname/dbname', connect_args={'sslmode':'require'}, echo=True).connect()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |