PyGreSQL - 无法插入数据

PyGreSQL - Unable to Insert Data

我将 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'

谁能指出我哪里出了问题?

连接上的方法escape_identifier对应libpq中的函数PQescapeIdentifier。它存在于 PyGreSQL 5.2 所需的 PostgreSQL 9 之后。如果 PyGreSQL 使用 no-escaping-funcs 选项安装或者它认为 PostgreSQL 早于版本 9,则 PyGreSQL 不会编译对这些函数的支持。

既然你说你安装了 PostgreSQL 12,可能的解释是你还安装了旧 PostgreSQL 版本的客户端库 (libpq),并且 pg_config工具报告旧版本。你应该用 pg_config --version 检查这个。 pg_config 工具在 libpq-devel 中,因此请确保为 PostgreSQL 12 安装了 libpqlibpq-devel

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