【问题标题】:Python connect to ODBC 2.x databasePython 连接到 ODBC 2.x 数据库
【发布时间】:2021-02-15 08:28:38
【问题描述】:

我正在尝试连接到一个旧数据库,该数据库具有自己的同样旧的 ODBC 驱动程序(不再维护)

# The driver is 32 bit, so I'm using Python 3.8.7 (32bit)
con = pyodbc.connect(r"Driver={CSI RBM 4.02 ODBC Driver};Dbq=" + database_path + ";Server=localhost")

但是我收到了这个错误:

[08001] [Microsoft][ODBC Driver Manager] The driver doesn't support the version of ODBC behavior that the application requested (see SQLSetEnvAttr).

根据https://knowledgebase.progress.com/articles/Article/000033360表示:

This error indicates that an application requested ODBC 3.x behavior however the driver was only ODBC 2.x compliant.

我假设这意味着 Python 或 Pyodbc 使用的是 ODBC 3.x,而驱动程序使用的是 2.x。

所以,如果我假设所有这些都是正确的,那么我的问题是 我如何强制 Pyodbc 使用 ODBC 2.x,或者有没有其他方法可以使用 Python 连接到这个数据库?

任何其他有用的信息也将不胜感激

【问题讨论】:

  • 是的,pyodbc 确实调用了SQLSetEnvAttr 并指定了SQL_OV_ODBC3。如果您使用的是 Windows,那么您可以尝试使用 ADODB(例如,通过 VBScript)来查看是否可以通过这种方式建立连接。
  • 是的,我在 Windows 上。你认为 ADODB 和 VBScript 是唯一的方法吗?理想情况下,我想保留在 Python 中,但如果需要,我会考虑这个
  • 不一定是唯一的方法,只是一种快速测试 pyodbc 以外的东西是否可以与该驱动程序一起使用的方法。

标签: python database odbc pyodbc


【解决方案1】:

您可以从源代码构建它。

/src/pyodbcmodule.cpp 文件中的 330 行将 SQL_OV_ODBC3 更改为 SQL_OV_ODBC2 然后构建并安装。 我还有一个古老的 odbc 驱动程序,它只适用于 SQL_OV_ODBC2,但每次使用 SQL_OV_ODBC3 时都会挂起。

/src/pyodbcmodule.cpp ~第 330 行

if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC2, sizeof(int) ) ) )
{
    PyErr_SetString(PyExc_RuntimeError, "Unable to set SQL_ATTR_ODBC_VERSION attribute.");
    return false;
}

您可以在此处找到从源代码构建的源代码和文档: https://github.com/mkleehammer/pyodbc/wiki/Building-pyodbc-from-source

python setup.py build
python setup.py install

对于驱动程序测试,您可以使用 Microsoft 的 ODBC 测试 工具。

您可以在不编写任何代码的情况下尝试 ODBC 驱动程序的任何设置。

https://docs.microsoft.com/en-us/sql/odbc/odbc-test?view=sql-server-ver15 https://www.microsoft.com/en-us/download/details.aspx?id=21995

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多