【问题标题】:PyODBC SQL Anywhere 17 Conect to Sybase Kernel DiesPyODBC SQL Anywhere 17 连接到 Sybase 内核死机
【发布时间】:2020-03-13 18:05:56
【问题描述】:

当我使用 Pyodbc 连接和 SQL Anywhere 17 驱动程序连接到 Sybase 数据库时,我正在使用 Ubuntu 18.04,同时尝试建立连接,但我的 Jupyter 笔记本死了。 期望是,我应该能够在 Ubunt 中运行此代码并连接到 Sybase DB。

我可以毫无问题地从 Windows 连接和运行查询(使用 DSN)。

我一直在使用其他驱动程序和 SQL Server、MySQL 和 MariaDB,我没有遇到任何问题。 我相信连接到 Sybase 数据库需要 SQLANYWHERE DRVIER。

如果有人知道当我使用 DSN 时如何获取从 pyodbc 传递到服务器的连接字符串?(也许这可以让我知道我做错了什么)。

一些建议?

代码在 windows 中运行没有问题

import pyodbc
import pandas as pd

cnxn = pyodbc.connect("DSN=RevDSN")
print(cnxn)
data = pd.DataFrame(pd.read_sql_query(query, cnxn))
cnxn.close()

【问题讨论】:

  • 您尝试连接的“Sybase DB”是“SAP SQL Anywhere”数据库还是“SAP ASE”数据库? “SQL Anywhere”和“ASE”是not the same thing

标签: python database kernel pyodbc sqlanywhere


【解决方案1】:

由于我没有找到一个很好的解释,所以我把它放在这里。

我从

安装了客户端

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) 

它奏效了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多