gpt4 book ai didi

python - Psycopg2 Python SSL 支持未编译

转载 作者:IT老高 更新时间:2023-10-28 21:13:08 24 4
gpt4 key购买 nike

我正在尝试使用带有 sslmode='required' 参数的 psycopg2 连接到我的 postgres 数据库;但是,我收到以下错误

psycopg2.OperationalError: sslmode value "require" invalid when SSL support is not compiled in

这里有一些关于我的系统的详细信息

  • Mac OS X El Capitan
  • Python 2.7
  • 通过 pip 安装 psycopg2
  • 通过自制软件安装 python

这是我试图解决问题的方法

  • brew卸载python
  • which python 仍然显示 python 存在于 /usr/local/bin/python 中,试图卸载它但无法卸载。听说这是操作系统使用的python,无论如何都不应该卸载
  • brew install python --with-brewed-openssl --build-from-source
  • pip 卸载 psycopg2
  • pip install psycopg2

做完所有这些之后,异常仍然发生。我正在通过 #!/usr/bin/env python 运行这个 python 脚本 不确定它是否重要,但这与 which python 显示的目录不同

最佳答案

由于您是通过 pip 安装的,因此您应该使用最新版本的 psycopg2 (2.6.1)。在稍微挖掘代码之后,似乎在connection_int.c中抛出了异常,它直接调用postgresql-c-libraries来设置db-connection。调用是这样发生的:

self->pgconn = pgconn = PQconnectStart(self->dsn);

Dprintf("conn_connect: new postgresql connection at %p", pgconn);

if (pgconn == NULL)
{
Dprintf("conn_connect: PQconnectStart(%s) FAILED", self->dsn);
PyErr_SetString(OperationalError, "PQconnectStart() failed");
return -1;
}
else if (PQstatus(pgconn) == CONNECTION_BAD)
{
Dprintf("conn_connect: PQconnectdb(%s) returned BAD", self->dsn);
PyErr_SetString(OperationalError, PQerrorMessage(pgconn));
return -1;
}

在您的连接语句中指定到 psycopg2.connect() 的关键字正在处理给该函数,并且错误作为 OperationalError 异常返回。

错误实际上是直接在 postgresql-lib 中生成的 - 您可能想检查您使用的版本,它是如何构建的,如果可能的话,将其升级到支持 SSL 的版本或从源代码重建它启用 SSL。

postgresql-docs 还指出,如果 sslmode 设置为 requireverify-caverify-full,缺少 SSL 支持会引发错误。见 here sslmode下供引用。

postgres-website列出了几种从二进制包安装 postgres 的方法,因此您可以选择一种适合您需要的方法。我对 OSX 不熟悉,所以我没有最好的建议。

This问题也可能有帮助。

您还需要重新安装 psycopg2-module,重建时请务必使用新安装的 lib。请参阅链接的问题(简而言之,运行 pip install psycopg2 时,您需要将新安装中包含的 pg_config 的路径放置到 $PATH)。

关于python - Psycopg2 Python SSL 支持未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com