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