首页 > 解决方案 > SQL 和 Python 出错 - 表或视图不存在

问题描述

如果我left JOIN t2 ON Col10 = Col1在 Python 的 sql 查询中添加为命令,我将无法运行脚本。没有它,我可以毫无问题地运行脚本。

我得到的错误是: SQL 错误:ORA-00942 表或视图不存在

PS-脚本完整脚本在 SQL 开发人员中运行良好。

任何建议为什么?

import cx_Oracle
import pandas as pd

conn = cx_Oracle.connect('......')

cur = conn.cursor()

sql = "SELECT \
    Col1, \
    Col2 \
    FROM t1 \
    left JOIN t2 ON Col10 = Col1"

cur.execute(sql)

sql_data = pd.DataFrame(cur.fetchall())
col_names = [row[0] for row in cur.description]
sql_data.columns = col_names
sql_data

标签: pythonsqldatabaseleft-joinoracle-sqldeveloper

解决方案


PS-完整的脚本在 SQL 开发人员中运行良好。

如果是这种情况,这意味着用户(您在 SQL Developer 中连接到的用户)可以同时访问t1t2表。


如果甲骨文抱怨

ORA-00942 表或视图不存在

当您SELECT从 Python 运行相同的语句时,这意味着您现在连接到的用户

conn = cx_Oracle.connect('......')

没有访问t2表的权限。那可能是因为

  • 你拼错了它的名字
  • 有人删除了表,所以它在该模式中不再存在
  • 它由其他人拥有,但您正在访问它,因为所有者授予您这样做的权限(并且这些权限现在已被撤销)
  • 您将其用作已删除的公共同义词

或其他一些原因。很难调试您发布的“通用”代码,因为很明显,表不是真正的,列t1也不是,等等。因此,重新阅读我刚才所说的内容并尝试找出罪魁祸首。祝你好运!t2col1col2


推荐阅读