PostgreSQL插入数据提示logs表不存在但PgAdmin显示存在该如何解决
问题原因与解决方法
错误触发的根本原因
- 第一个
relation "logs" does not exist错误:
PostgreSQL默认会将未加双引号的SQL标识符自动转为小写,如果你建表时使用了双引号包裹非全小写的表名、或者表所在的schema不在当前数据库连接的search_path中、亦或是代码连接的数据库实例/库名和PgAdmin中查看的不一致,都会触发该报错。 - 第二个语法错误:
你使用双引号包裹整个SQL字符串,字符串内部又直接使用双引号包裹表名,导致Python字符串提前闭合,触发语法解析错误。
具体解决步骤
- 修正SQL字符串的语法错误,两种写法二选一即可:
写法一:使用单引号包裹整个SQL语句
写法二:转义字符串内部的双引号sql = 'INSERT into "logs" (ip, time, request, error_code, system_info) VALUES (%s, %s, %s, %s, %s)'sql = "INSERT into \"logs\" (ip, time, request, error_code, system_info) VALUES (%s, %s, %s, %s, %s)" - 若修正后仍提示表不存在,给表名补充schema完整路径(默认表一般在
publicschema下):sql = 'INSERT into public."logs" (ip, time, request, error_code, system_info) VALUES (%s, %s, %s, %s, %s)' - 也可以在执行插入前先设置当前连接的搜索路径:
cur.execute("SET search_path TO public;") - 如仍有问题,可执行以下语句验证当前连接可见的表,确认表名大小写和所属schema:
按照查询返回的表名完全匹配写SQL即可。cur.execute("SELECT tablename, schemaname FROM pg_tables;") print(cur.fetchall())
内容的提问来源于stack exchange,提问作者Lina
相关产品推荐
相关产品推荐

