尝试使用Python连接到Teradata时发生DLL初始化错误

2024-06-16 08:58:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用Python的Teradasaql库来查询Teradata,刚刚开始使用以前有效的代码来获取DLL初始化错误

这就是准确的错误: OSError: [WinError 1114] A dynamic link library (DLL) initialization routine failed

当我调用teradasql.connect()时,它抛出。以下是完整的堆栈跟踪:

File "test.py", line 23, in <module>
    password = db_password
  File "C:\Program Files (x86)\Python\Python37\lib\site-packages\teradatasql\__init__.py", line 101, in __init__
    goside = ctypes.cdll.LoadLibrary(sLibPathName)
  File "C:\Program Files (x86)\Python\Python37\lib\ctypes\__init__.py", line 434, in LoadLibrary
    return self._dlltype(name)
  File "C:\Program Files (x86)\Python\Python37\lib\ctypes\__init__.py", line 356, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 1114] A dynamic link library (DLL) initialization routine failed

我已经尝试手动加载TeradaSQL的init文件正在查看的dll,使用

import ctypes
goside = ctypes.cdll.LoadLibrary(r'C:\Program Files (x86)\Python\Python37\Lib\site-packages\teradatasql\teradatasql.dll')

虽然ctypes.cdll.LoadLibrary()适用于我机器上的其他.dll文件,但它会抛出相同的错误

已尝试重新安装TeradaSQL并恢复到以前的版本。两者都没有帮助

奇怪的是,这种联系有时确实有效。上面生成堆栈跟踪的代码在.ipynb文件而不是.py文件中时工作。但我在.ipynb文件中得到了相同的错误,代码略有不同。 这是我的密码:

import pandas as pd
import teradatasql 
from getpass import getpass 


db_password = getpass('Teradata password: ')


with teradatasql.connect(
    host = xxxx,
    user = xxxx,
    password = db_password
) as connect:
    query = '''
        …
    '''
    results = pd.read_sql(query, connect)

如何处理此dll问题并使连接再次可靠地工作


Tags: 文件inpyinitconnect错误linepassword