Python使用psycopg2查询PostgreSQL已存在的MddPublisher表提示不存在如何解决
问题根因
PostgreSQL 默认对未加双引号的SQL标识符执行自动小写转换,仅当标识符被双引号包裹时才会保留大小写。
你查询时写的MddPublisher未加双引号,会被数据库自动转换为mddpublisher执行,和你实际创建的驼峰命名表名不匹配,因此报relation "mddpublisher" does not exist错误。你查询information_schema得到的是表的真实命名,因此可以查到MddPublisher存在。
修复方案
有两种可行修复方式:
- 方式一:查询时给表名加双引号保留大小写,无需修改表结构。修正后的完整代码如下:
import psycopg2 def db(): conn = psycopg2.connect( "dbname=mydb user=postgres password=****** host=*.*.*.*") cur = conn.cursor() # 表名用双引号包裹,保留驼峰大小写 cur.execute('SELECT * FROM "MddPublisher"') query_results = cur.fetchall() print(query_results) # 关闭游标和连接,避免资源泄漏 cur.close() conn.close() db()
- 方式二:如果允许修改表结构,建议将表名重命名为符合PostgreSQL命名规范的全小写下划线格式
mdd_publisher,后续所有查询无需额外加双引号,可彻底避免大小写相关的问题。
内容的提问来源于stack exchange,提问作者wdafoe666
相关产品推荐
相关产品推荐

