我对使用远程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才会给出错误。
有人能指出我做错了什么吗?或者我能运行什么来查明问题所在?
1条答案
按热度按时间xlpyo6sf1#
<database>.<table>
不正确。在Db2上,您有数据库-模式-表
您应该使用
<schema>.<table>
,因为数据库已经在连接字符串中指定。当从“本地”数据库连接到远程数据库时,支持
<database>.<schema>.<table>
...但仅用于基本选择。例如,Db2 for IBM i不支持“本地”表和远程表之间的连接。