1

我将 CentOS-6 与 Python 3.8、PostgreSQL 12 和 PyGreSQL 5.2.2 一起使用。这是我尝试将数据插入数据库时​​遇到的错误。

>>> db.insert('settings', None, **data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.8/site-packages/pg.py", line 2322, in insert
    adapt = params.add
  File "/usr/local/lib/python3.8/site-packages/pg.py", line 1667, in __getattr__
    if self.db:
AttributeError: 'pg.Connection' object has no attribute 'escape_identifier'

谁能指出我出了什么问题?

4

1 回答 1

0

连接上的方法escape_identifier对应PQescapeIdentifierlibpq中的函数。它自 PostgreSQL 9 以来就存在,这是 PyGreSQL 5.2 所需的。no-escaping-funcs如果 PyGreSQL 与选项一起安装或者它认为 PostgreSQL 早于版本 9,则PyGreSQL 不会编译对这些函数的支持。

既然您说您安装了 PostgreSQL 12,可能的解释是您仍然libpq安装了旧 PostgreSQL 版本的客户端库 (),并且该pg_config工具报告了该旧版本。你应该用pg_config --version. 该pg_config工具位于 中libpq-devel,因此请确保您已为 PostgreSQL 12 安装libpq并安装该工具。libpq-devel

您也可以尝试通过安装 PyGreSQL 来显式启用转义功能python setup.py build_ext --escaping-funcs install,但您仍然需要最新的libpq,并且当 PyGreSQL 认为 libpq 太旧时,还会禁用其他功能。因此,正确的解决方案是确保libpq是最新的并pg_config --version报告相应的 PostgreSQL 版本。

于 2021-03-19T08:38:25.977 回答