Python - 64位系统上的Teradata软件包和32位ODBC管理员

时间:2017-09-18 05:27:09

标签: python windows odbc teradata

我在运行此代码时遇到问题:

import teradata

udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",
    logConsole=False")

session = udaExec.connect(method="odbc", system="KHD_DEV",
    username="User", password="Pass");

for row in session.execute("*some valid query*"):
    print(row)

它给了我和错误: 没有找到Teradata'的司机。可用的驱动程序:驱动程序列表。 我认为问题来自使用64位系统,而我的正确ODBC驱动程序是在32位ODBC管理器中。列出的驱动程序来自64位版本的ODBC管理器。

我认为Teradata看到我的系统并检查C:\ Windows \ System32 \ odbc32.dll中我安装了64位版本的驱动程序。但是32位版本在路径下:C:\ Windows \ SysWOW64 \ odbc32.dll。

我尝试了几种不同的方法,但没有一种方法有效:

  1. 通过在我的代码中更改udaExec:

    udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",
        logConsole=False, odbcLibPath="C:\\Windows\\SysWOW64\\odbc32.dll"
    

    完全相同的错误。

  2. 我尝试编辑Teradata包代码:

    在tdodbc.py我改变了:在___ init ____(参数)中我试图给他正确的路径:odbcLibPath =" C:\ Windows \ SysWOW64 \ odbc32.dll",但它没有工作。

    我认为问题也可能出现在:

    def initOdbcLibrary(odbcLibPath=None):
    """Initialize the ODBC Library."""
        global odbc
        if odbc is None:
            if osType == "Windows":
                odbc = ctypes.windll.odbc32
    

    但我不知道如何改变这个odbc。

  3. 在udaexec.py中,我尝试将连接函数中的这个路径分配给看起来像这样的部分中的odbLibPath变量:

    elif method.lower() == METHOD_ODBC:
                    conn = UdaExecConnection(
                        self, tdodbc.connect(queryBands=self.queryBands,
                                             odbcLibPath=self.odbcLibPath)
    
  4. 你怎么看?有没有办法让它工作而不在64位ODBC管理器中安装驱动程序?我也尝试使包girraffez工作。在安装脚本中我还需要更改路径并且它有效,但后来我遇到了其他问题,所以我宁愿坚持teradata包。

    谢谢

0 个答案:

没有答案