我在Python3.8、PostgreSQL 12和PyGreSQL 5.2.2中使用CentOS-6。这是我试图将数据插入数据库时遇到的错误。
>>> 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'有人能指指我怎么回事吗?
发布于 2021-03-19 08:38:25
连接上的方法escape_identifier对应于libpq中的函数PQescapeIdentifier。它存在于PostgreSQL 9之后,这是PyGreSQL 5.2所需要的。如果PyGreSQL是与no-escaping-funcs选项一起安装的,或者如果它认为PostgreSQL比版本9更早,那么它不会编译对这些函数的支持。
既然您说您已经安装了PostgreSQL 12,一个可能的解释可能是仍然安装了旧PostgreSQL版本的客户端库(libpq),而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版本。
https://stackoverflow.com/questions/66696913
复制相似问题