当我使用带有SQL Anywhere 17驱动程序的Pyodbc连接连接到Sybase数据库时,我正在Ubuntu 18.04上工作,同时尝试建立连接我的Jupyter笔记本Dies。我的期望是,我应该能够在Ubunt中运行这段代码,并连接到Sybase数据库。
我可以从Windows连接并运行查询而不会出现问题(使用DSN(。
我一直在使用其他驱动程序和SQL Server、MySQL和MariaDB,我没有遇到任何问题。我认为连接到Sybase数据库需要SQLANYWHERE DRVIER。
如果有人知道当我使用DSN时,如何获取从pyodbc传递到服务器的连接字符串?(也许这能让我知道自己做错了什么(。
一些建议?
代码在窗口中运行而没有问题
import pyodbc
import pandas as pd
cnxn = pyodbc.connect("DSN=RevDSN")
print(cnxn)
data = pd.DataFrame(pd.read_sql_query(query, cnxn))
cnxn.close()
由于我没有找到一个好的解释,所以我把它放在这里。
我从安装了客户端
https://archive.sap.com/documents/docs/DOC-35857
然后按照的基本指令
https://wiki.scn.sap.com/wiki/display/SQLANY/Installing+SQL+Anywhere+17+on+Ubuntu+14.04
ODBC客户端不会要求密钥
正如文档所说,重要的部分是运行sa_config.sh并确保进行导出。
最后编辑/etc/odbcinst.ini文件并添加驱动程序。
例如
[SQL Anywhere 17]
Driver=/opt/sqlanywhere17/lib64/libdbodbc17.so
TDS_Version=5.0
UsageCount=1
然后我用了这个连接字符串
import pyodbc
cnxn = pyodbc.connect('Driver={SQL Anywhere 17};LINKS=TCPIP{HOST=<server ip here>};PORT=2638;UID=admin;PWD=<password here>;ENG=<engine name>;DBN=<database name>;')
cursor = cnxn.cursor()
cursor.execute("select top 10 * from dba.<table name>")
for row in cursor:
print(row)
它奏效了。