psycopg2 连接给出操作错误不受支持的前端协议
psycopg2 connect gives operational error unsupported frontend protocol
我正在尝试从 python 3.8.2 Windows 10 上的 anaconda python 3.8.2 连接到 postgres 12.2 数据库。我正在使用安装了以下软件包的 conda 环境:
asgiref==3.2.7
certifi==2020.4.5.1
Django==3.0.4
django-crispy-forms==1.8.1
Jinja2==2.11.1
MarkupSafe==1.1.1
psycopg2==2.8.5
pytz==2019.3
sqlparse==0.3.1
wincertstore==0.2
我已经创建了一个数据库,我可以使用 psql 和 pgAdmin 进行连接。在 python 提示符下,我可以导入 psycopg2,但连接到数据库时出现错误:
>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "J:\Programs\Anaconda3\envs\myenv\lib\site-packages\psycopg2\__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: unsupported frontend protocol 1234.5679: server supports 2.0 to 3.0
这是一个已知错误,客户端认为它可以使用 GSS 加密,但后来发现它不能(服务器不支持它,或者不喜欢凭据),因此尝试重新协商 ssl 加密。
您通常必须竭尽全力让客户端认为它可以使用 GSS 加密(Mac 除外,其中一些有问题的 mac 库让它总是认为它可以)。您是否有意在您的 Anaconda 环境中设置 GSS/kerberos?
按照@jjanes 的建议和相关回答 我禁用了 ssl 和 gss:
>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret' sslmode='disable' gssencmode='disable'")
这有效,但请注意,您不需要同时禁用 sslmode
和 gssencmode
,单独禁用其中一个也有效。
Django用户只需在settings.py
中添加相关选项即可:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'secret',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {'sslmode':'disable'},
}
}
我正在尝试从 python 3.8.2 Windows 10 上的 anaconda python 3.8.2 连接到 postgres 12.2 数据库。我正在使用安装了以下软件包的 conda 环境:
asgiref==3.2.7
certifi==2020.4.5.1
Django==3.0.4
django-crispy-forms==1.8.1
Jinja2==2.11.1
MarkupSafe==1.1.1
psycopg2==2.8.5
pytz==2019.3
sqlparse==0.3.1
wincertstore==0.2
我已经创建了一个数据库,我可以使用 psql 和 pgAdmin 进行连接。在 python 提示符下,我可以导入 psycopg2,但连接到数据库时出现错误:
>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret'")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "J:\Programs\Anaconda3\envs\myenv\lib\site-packages\psycopg2\__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL: unsupported frontend protocol 1234.5679: server supports 2.0 to 3.0
这是一个已知错误,客户端认为它可以使用 GSS 加密,但后来发现它不能(服务器不支持它,或者不喜欢凭据),因此尝试重新协商 ssl 加密。
您通常必须竭尽全力让客户端认为它可以使用 GSS 加密(Mac 除外,其中一些有问题的 mac 库让它总是认为它可以)。您是否有意在您的 Anaconda 环境中设置 GSS/kerberos?
按照@jjanes 的建议和相关回答
>>> import psycopg2
>>> c = psycopg2.connect("host='localhost' dbname='mydb' user='myuser' password='secret' sslmode='disable' gssencmode='disable'")
这有效,但请注意,您不需要同时禁用 sslmode
和 gssencmode
,单独禁用其中一个也有效。
Django用户只需在settings.py
中添加相关选项即可:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'secret',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {'sslmode':'disable'},
}
}