You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python无法查询Oracle某表但SQL Developer可正常查询?

问题根源与解决方案

这既不是权限问题,也不是Oracle Instant Client安装错误,核心原因是Oracle的标识符大小写敏感性规则:

  • Oracle默认会把不带双引号的表名、模式名自动转换为大写存储。但如果创建表时使用了双引号(比如CREATE TABLE "my_schema"."my_table" (...)),表名会以定义时的精确大小写(这里是小写)存储,查询时必须用双引号包裹才能匹配。
  • 你在SQL Developer里用SELECT * FROM "my_schema"."my_table";能查到,就是因为双引号指定了精确的大小写名称。而Python代码里的SELECT * FROM my_schema.my_table会被Oracle自动转成SELECT * FROM MY_SCHEMA.MY_TABLE,但实际存在的表是小写的my_schema.my_table,自然找不到,触发ORA-00942错误。
  • 其他表能正常查询,是因为那些表创建时没加双引号,Oracle自动存为大写,Python里的小写表名转成大写后能匹配到实际表名。

解决方法

修改Python中的SQL语句,给模式名和表名加上双引号即可:

df = pd.read_sql_query('SELECT * FROM "my_schema"."my_table"', engine)

内容的提问来源于stack exchange,提问作者innit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:49:56