使用 pyodbc 连接到 Db2 for IBM i 时遇到问题

Ant*_*ony 3 python db2 pyodbc ibm-midrange

我正在尝试使用 pyodbc 和 ibm db2 odbc 驱动程序通过 db2 连接到 as400。

import pyodbc

connection = pyodbc.connect(
    driver='{IBM DB2 ODBC DRIVER}',
    system='192.168.1.100',
    uid='user',
    pwd='pass')
c1 = connection.cursor()

#this is meaningless sql, i just want the connection
c1.execute('select * from libname.filename')
for row in c1:
    print (row)
Run Code Online (Sandbox Code Playgroud)

运行这个给我这个错误

python pydata.py

Traceback (most recent call last):
  File "C:\Users\tca\Desktop\ScriptingSTuff\pydata.py", line 3, in <module>
    connection = pyodbc.connect(
pyodbc.OperationalError: ('08001', '[08001] [IBM][CLI Driver] SQL1013N  The database alias name or database name "" could not be found.  SQLSTATE=42705\r\n (-1013) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

这都是win10下的

编辑:添加此“database='s10c38ft'”

import pyodbc

connection = pyodbc.connect(
    driver='{IBM DB2 ODBC DRIVER}',
    system='192.168.1.100,8471',
    database='s10c38ft',
    uid='user',
    pwd='pass')
c1 = connection.cursor()

c1.execute('select * from libname.filename')
for row in c1:
    print (row)
Run Code Online (Sandbox Code Playgroud)

让它挂在闪烁的光标上,我什至无法使用 CTRL+C 来结束它,我必须关闭 cmd。

Joh*_*n Y 8

正确的驱动程序名称应该是 IBM i Access ODBC Driver(但请参阅下面的注释)。除此之外,你的第一个例子是正确的:

connection = pyodbc.connect(
    driver='{IBM i Access ODBC Driver}',
    system='192.168.1.100',
    uid='user',
    pwd='pass')
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,主要有两种可能性:

  1. 您正在使用旧的 ODBC 驱动程序。如果您使用的是旧版 iSeries Access(在这种情况下,驱动程序名称为iSeries Access ODBC Driver)或什至旧版 Client Access(驱动程序名称为Client Access ODBC Driver (32-bit)),就会发生这种情况。如果您为驱动程序选择合适的名称,它就会起作用。

  2. 您使用的 ODBC 驱动程序不适用于 IBM i。Db2 家族中最常用的成员是 Db2 for LUW(Linux、Unix、Windows),但还有其他成员。这些都不适合你。

您可以通过调用 来找到已安装的确切 ODBC 驱动程序名称列表pyodbc.drivers()。如果您没有我上面提到的任何驱动程序,那么您就没有合适的驱动程序。您需要的 ODBC 驱动程序就是此处描述的驱动程序。

  • @Anthony - 检查“pyodbc.drivers()”返回的列表,以查看哪些 ODBC 驱动程序可用于您的 Python 应用程序。 (3认同)