db2 表对象仍存在时出现IBM AS400找不到文件错误

t30tvxxf  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(270)

我对使用远程IBM数据库比较陌生。我正在Windows 10上的Anaconda虚拟环境中使用ODBC Python3连接器连接到远程IBM AS400数据库。我成功工作的连接是:

import pyodbc

connection = pyodbc.connect(
    Driver='{iSeries Access ODBC Driver}',
    System='<host>',
    database='<database>',
    uid='<username>',
    pwd='<password>')
c1 = connection.cursor()
print('Connection established')

连接后,我运行以下命令来查看表的列表:

c1.execute("select table_name from sysibm.sqltables")

我看到了需要查询的所有表。但是当我尝试使用以下命令查询特定表的内容时:

c1.execute("select * from <database>.<table> LIMIT 100")

我收到一个错误:

ProgrammingError: ('42S02', '[42S02] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0204 - <table> der Art *FILE in <database> nicht gefunden. (-204) (SQLExecDirectW)')

(It在德语中,它表示在数据库中未找到类型为 *FILE的表)
(And我没有使用尖括号,它只是为了演示)
但是像DBeaver这样的软件对于表列表查询和特定表查询都返回有效的数据,只有python才会给出错误。
有人能指出我做错了什么吗?或者我能运行什么来查明问题所在?

xlpyo6sf

xlpyo6sf1#

<database>.<table>不正确。
在Db2上,您有数据库-模式-表
您应该使用<schema>.<table>,因为数据库已经在连接字符串中指定。
当从“本地”数据库连接到远程数据库时,支持<database>.<schema>.<table>...但仅用于基本选择。例如,Db2 for IBM i不支持“本地”表和远程表之间的连接。

相关问题