Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在macosx上使用pyodbc的DB2_Python_Macos_Db2_Pyodbc - Fatal编程技术网

Python 在macosx上使用pyodbc的DB2

Python 在macosx上使用pyodbc的DB2,python,macos,db2,pyodbc,Python,Macos,Db2,Pyodbc,我正试图在MacOSX上使用pyodbc连接到DB2数据库,但似乎无法实现。在类似条件下,我成功地使用FreeTDS连接到MS SQL Server 首先,我从IBM安装了db2exc_client_952_MAC_x86_64。成功安装之后,我通过ODBC管理员添加了驱动程序 然后我试着运行这个python: import pyodbc cnxn = pyodbc.connect('Driver={IBM DB2 ODBC Driver}; Hostname=myhost.com; Port

我正试图在MacOSX上使用pyodbc连接到DB2数据库,但似乎无法实现。在类似条件下,我成功地使用FreeTDS连接到MS SQL Server

首先,我从IBM安装了db2exc_client_952_MAC_x86_64。成功安装之后,我通过ODBC管理员添加了驱动程序

然后我试着运行这个python:

import pyodbc
cnxn = pyodbc.connect('Driver={IBM DB2 ODBC Driver}; Hostname=myhost.com; Port=50300; Protocol=TCPIP; Database=DB2ET; CurrentSchema=SCHM1; UID=MYUID; PWD=MYPWD;');
我收到这个错误:

回溯(最近一次呼叫最后一次): 文件“”,第1行,在 pyodbc.Error:('HY000','[]X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8 8\X8 8\X8\X8\X8 8\X8\X8\X8 8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\8\8\X8\X8\X8\X8\X8\X8\8\8\X8\X8\X8\X8\X8\X8\8\8\X8\X8\X8\X8\8\8\X8\8\8\8 x93\xa0\x80\xb4\xf8\x88\x80\x80\xf8\x88\x80\x81\x81\xf8\x98\x90\x81\xa4\x08\x98\x90\x81\x84\x08\x98\x90\x90\x90\x90\x90\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x90\x90\x90\x90\X10\X10\X10\X10\X10\X10\X8\X8\X8\X8\X8\X8\X0\X0\X8\X0\X8\X8\X8\X0\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X0\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\Xx80\xa0\xf8\x9a\x90\x81\xb8\xf8\x9d\x80\x81\xb3\xf8\x88\x80\x80\xae\xf8\x94\xb0\x80\xa0\xf8\x93\x80\x81\x91\x91\x91\XX8\X8\X8\X9\X9\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X9\X8\X8\X9\X8\X9\X8\X8\X8\X9\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8\X8 \ \ \ \xa2\x80\xb2\xfd\x96\x93\x92\x81\xb2\xfd\x93\x82\xa2\xb9\x93\xff\x7f(-1024)(SQLDriverConnect)'))

我从搜索中得出结论,HY000可能是一个连接字符串问题,但我不确定如何破译其余的错误


有什么想法吗?

连接字符串似乎因数据库而异,并且您使用的连接字符串与DB2不兼容

下面是一些DB2连接字符串示例:

以下是关于DB2连接字符串中有效内容的最佳参考:

基于此,我将您的连接字符串转换为:

Driver={IBM DB2 ODBC Driver}; Hostname=myhost.com; Port=50300; Protocol=TCPIP; Database=DB2ET; CurrentSchema=SCHM1; UID=MYUID; PWD=MYPWD;
致:


下面是我的连接字符串在PHP中的外观(我知道您使用的是Python,但我认为它们非常相似):

注意,我说的是“SYSTEM=…”,而你说的是“Hostname=…”——我认为这可能很重要

您的DSN是否已完全设置?在我的Linux机器上,我有两个文件,其中包含DSN的所有配置信息

odbc.ini

[primary]
Description             = primary
Driver                  = iSeries Access ODBC Driver
System                  = xxx.xxx.xxx.xxx
UserID                  = xxxxxxxxxx
Password                = xxxxxxxxxx
Naming                  = 0
DefaultLibraries        = QGPL
Database                = xxxxxxxxxx
ConnectionType          = 0
CommitMode              = 2
ExtendedDynamic         = 0
DefaultPkgLibrary       = QGPL
DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression    = 1
LibraryView             = 0
AllowUnsupportedChar    = 0
ForceTranslation        = 0
Trace                   = 0
和odbcinst.ini

[iSeries Access ODBC Driver]
Description     = iSeries Access for Linux ODBC Driver
Driver          = /usr/lib/libcwbodbc.so
Setup           = /usr/lib/libcwbodbcs.so
NOTE1           = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2           = the following Driver64/Setup64 keywords will provide that support.
Driver64        = /usr/lib/lib64/libcwbodbc.so
Setup64         = /usr/lib/lib64/libcwbodbcs.so
Threading       = 2
DontDLClose     = 1
UsageCount      = 1
我相信您在显示的对话框中输入了类似的信息,可能在DSN选项卡下

是否启用了ODBC跟踪?要在Linux中执行此操作,我必须将其添加到odbcinst.ini文件中:

[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log
这为我提供了很多信息,有助于诊断我过去遇到的一些问题

根据这一页(http://code.google.com/p/pyodbc/wiki/ConnectionStrings),“需要知道的最重要的事情是pyodbc甚至不查看连接字符串——它未经修改直接传递给SqlDriverConnection。”如果这是真的,那么将“主机名”更改为“系统”就可以了

编辑

这可能是编码问题吗?Unicode试图与UTF-8服务器(或类似服务器)通信?您是否尝试过设置CCSID?配置驱动程序时,是否有诸如“BinAsChar”、“CCSID”或“主机CCSID”之类的选项


默认情况下,我认为CCSID是37(美国/加拿大),Unicode是1208。

为什么不使用驱动程序定义用户DSN,然后在connect()方法中使用DSN

顺便说一句,使用除“iSeries Access ODBC驱动程序”之外的任何驱动程序都可能导致DB2许可错误。也许这就是信息所说的


该驱动程序是在您安装“IBM i Access for Windows 7.1”时安装的。

谢谢您的建议,但在更改该连接字符串后,我仍然看到相同的乱码错误。我已经尝试了10多种连接字符串,到目前为止没有一种有效。我原来帖子中的那个实际上是一个可以在Windows.Hhmmm上运行的。此链接表示HY000表示它希望提示对话框,因为连接字符串中的信息不足。数据库服务器上是否设置了某种策略,不允许在连接字符串中内联UID和PWD?您是否尝试了一个没有UID和PWD的连接字符串,只是为了看看会发生什么?对于这个问题,没有数据库和CurrentSchema?你找到这个了吗?我在ODBC管理员中设置ODBC驱动程序时遇到问题。@cabe56不,不幸的是,我没有弄明白这一点。我的下一个想法是使用类似的东西,因为我可以在Mac上使用DbVisualizer访问DB2 fine(我相信它在幕后使用JAVA)
[iSeries Access ODBC Driver]
Description     = iSeries Access for Linux ODBC Driver
Driver          = /usr/lib/libcwbodbc.so
Setup           = /usr/lib/libcwbodbcs.so
NOTE1           = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2           = the following Driver64/Setup64 keywords will provide that support.
Driver64        = /usr/lib/lib64/libcwbodbc.so
Setup64         = /usr/lib/lib64/libcwbodbcs.so
Threading       = 2
DontDLClose     = 1
UsageCount      = 1
[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log
pyodbc.connect( 'DSN=MYDSN;UID=MYUSER;PWD=MYPASS' )