4

我正在尝试通过 python 连接到 SQL Anywhere 数据库。我已经创建了 DSN,我可以使用命令提示符使用dbisql - c "DNS=myDSN". 当我尝试通过 python 连接时,con = sqlanydb.connect(DSN= "myDSN") 我得到

`Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    con = sqlanydb.connect(DSN= "RPS Integration")
  File "C:\Python27\lib\site-packages\sqlanydb.py", line 522, in connect
    return Connection(args, kwargs)
  File "C:\Python27\lib\site-packages\sqlanydb.py", line 538, in __init__
    parent = Connection.cls_parent = Root("PYTHON")
  File "C:\Python27\lib\site-packages\sqlanydb.py", line 464, in __init__
    'libdbcapi_r.dylib')
  File "C:\Python27\lib\site-packages\sqlanydb.py", line 456, in load_library
    raise InterfaceError("Could not load dbcapi.  Tried: " + ','.join(map(str, names)))
InterfaceError: (u'Could not load dbcapi.  Tried: None,dbcapi.dll,libdbcapi_r.so,libdbcapi_r.dylib', 0)`
4

3 回答 3

1

我能够解决这个问题。我永远无法使用 sqlanydb.connect。我最终使用了pyodbc。所以我的最终连接字符串是con = pydobc.connect(dsn="myDSN"). 我认为 sqlanydb 只有在 sqlanydb 17 中才能完全发挥作用,而且我使用的是以前的版本。

于 2018-12-18T17:23:53.790 回答
0

遇到 OP 显示的回溯的一种方法是运行 64 位 Python 解释器,它无法加载 32 位 dbcapi.dll。尝试使用“py -X-32”启动以强制使用 32 位引擎,或使用 32 位 python 引擎重新安装。

不幸的是 sqlanydb 的代码试图聪明地寻找 dbcapi 也最终吞下了加载过程中抛出的异常。sqlanydb 作者可能认为加载失败意味着找不到文件,但情况并非总是如此。

于 2019-05-10T18:20:41.060 回答
0

根据本地安装 Sybase 的方式,也可能是 Python 模块dbcapi.dll在您的PATH. 一个快速的解决方法是创建一个包含正确路径的新SQLANY_API_DLL环境变量(这是None错误消息中尝试使用的名称中的首字母;它优先于所有其他路径),通常%SQLANY16%\Bin64\dbcapi.dll取决于您安装的版本(Sybase 通常会根据每个版本创建一个指向其安装文件夹的环境变量)。

于 2021-07-20T15:09:41.167 回答