我正在尝试使用pyodbc连接到可移植应用程序中的Server (MS通过FreeTDS);由于它应该是独立的,所以我希望避免在系统上显式安装驱动程序,只需在应用程序中带ODBC。
此页建议可以直接在连接字符串中指定驱动程序dll
DRIVER=
函数的szConnStrIn
参数中指定SQLDriverConnect
参数。例如:
szConnStrIn = "driver=ospath/dbodbc6.dll;dbf=c:\asademo.db“
其中,ospath
是Anywhere安装目录的操作系统子目录。通过Linux上的pyodbc+libtdsodbc.so
来尝试它,它确实工作得很好;但是,在Windows (pyodbc+tdsodbc.dll
)上尝试相同的操作总是会得到的
pyodbc.Error:(‘no 002’,‘未找到IM002ODBC驱动程序管理器数据源名称,也没有指定默认驱动程序(0) (SQLDriverConnect)')
(不过,我的libtdsodbc.so
似乎很好,因为如果我将它作为“常规”驱动程序安装,并将其命名为它的名称,则连接良好)
检查SQLDriverConnect
和相关页面时,没有提到与dll路径直接使用的DRIVER=
选项。
那么,Windows不支持“直接到驱动程序dll”连接吗?是否有其他选择,特别是Python,可以绕过ODBC驱动程序管理器直接连接到驱动程序dll?
发布于 2020-10-23 07:49:30
与TallTed的答案提到的一样,您所链接的文档包含了相当多的信息(但可能当时并不存在),而且它也明确说明了driver
参数的含义:
SQLDrivers函数返回的驱动程序描述。例如,Rdb或Server。
因此,指出Windows中的路径(至少使用默认ODBC实现)是无效的。
在一般情况下,不注册ODBC驱动程序也是不可能的,这需要管理员权限。这个答案列出了一些选项。
发布于 2019-02-25 06:43:41
现在,也就是2.5年后,很可能无法解决这个问题,但我的最佳猜测是未注册libtdsodbc.so
上的错误或权限错误,或者您的SQLDriverConnect()
调用中的其他错误(您没有提供这些错误,因此无法进行分析)。
我想你一定没有仔细或完整地读过SQLDriverConnect()
,因为它是SQLDriverConnect()
--
empty-string ::=attribute ::= attribute-keyword=attribute-value | DRIVER=[{]attribute-value[}]
请注意,这并不是“绕过ODBC驱动程序管理器”,尽管它确实可以减少odbc.ini
的连接(因此不引用odbc.ini
注册表树,也不引用其他操作系统上的odbc.ini
文件)。
https://stackoverflow.com/questions/40263138
复制