postgresql - PyGreSQL - 无法插入数据
问题描述
我将 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
对应PQescapeIdentifier
libpq中的函数。它自 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 版本。
推荐阅读
- ssl - libucrl 未能检查服务器证书
- c - 遍历C中的字符数组
- react-native-flatlist - 防止 FlatList 重新渲染导致性能问题
- liquibase - 将 Google Cloud Spanner 与 Liquibase 连接
- javascript - 如何修改 DocumentFragment 中的所有节点?
- django - 如何解决django迁移冲突?
- javascript - 如何根据另一个对象对数组对象进行排序
- delphi - TFDMemTable 过滤器没有响应我的 TEdit OnChangeTracking
- javascript - 确定元素是否是 React 中另一个元素的子元素,并考虑门户
- javascript - 为什么页面刷新后本地存储不持久