我正在尝试连接到 Sybase 服务器以使用在我的 Mac M2 芯片上运行的 Python 脚本提取一些数据。
我尝试连接的 Sybase IQ 服务器版本:
SAP IQ SAP IQ/16.1.040.1841/16220/P/SP04.11/Sun_x64/OS 5.11/64位/2021-11-01
我能够使用 JConnect JDBC 驱动程序从 DBeaver 客户端成功连接。
jConnect (TM) for JDBC (TM) jConnect (TM) for JDBC(TM)/16.0 SP03 PL02(内部版本 27403)/P/EBF27518/JDK 1.6.0/jdbcmain/OPT/周一 8 月 28 日 18:41:14 PDT 2017
我正在尝试使用 Python 脚本自动化某些工作负载,并希望从本地计算机建立相同的连接。
我正在使用 jaydebeapi 库 (https://pypi.org/project/JayDeBeApi/) 来建立连接。连接字符串如下所示:
jconn4_file_path = ["/Users/abishek.arunachalam/Library/DBeaverData/drivers/drivers/sybase/jconnect/jconn4.jar"]
driver = "com.sybase.jdbc4.jdbc.SybDriver"
connection_string = f"jdbc:sybase:Tds:{hostname}:2055?ServiceName={database}"
conn = jaydebeapi.connect(
driver,
connection_string,
[username, password],
jconn4_file_path
)
由于我的是M2机器,所以我使用的是zulu-21.jdk(https://docs.azul.com/core/install/macos)版本的Java JDK和3.12版本的Python。我使用相同的 JConnect JDBC 驱动程序路径。
出于某种奇怪的原因,当我尝试连接时,出现以下错误:找不到合适的驱动程序:
连接到 Sybase 数据仓库时出错:java.sql.SQLException:找不到 jdbc:sybase:Tds:hostname?ServiceName=database_name 的合适驱动程序
我尝试过将 SQL Server ODBC 驱动程序与 pyodbc 和 pymysql 一起使用,但由于与 M2 Apple 芯片一起使用的限制而没有成功。非常感谢任何有关调试或为我指明正确方向的帮助。
我在使用 jaydebeapi 连接时遵循了此操作: Python 中的 Sybase IQ 连接
不久前,我在分析旧 Sybase (SAP ASE 16.0) 数据库中的数据时遇到了同样的“没有找到适合 jdbc 的驱动程序”错误。如果我没记错的话,有些人建议线程问题可能会导致此错误,但没有人有可行的解决方案。
我最终使用了jpype.dbapi2,它比 jaydebeapi 更快。
import jpype
import jpype.dbapi2
hostname = 'host'
port = '2055'
database_name = 'db_name'
database_user = 'username'
database_pass = 'password'
connection_string = f"jdbc:sybase:Tds:{hostname}:{port}/{database_name}"
jpype.addClassPath(r'/path/to/jconn4.jar')
jpype.startJVM()
try:
conn = jpype.dbapi2.connect(connection_string,
driver="com.sybase.jdbc4.jdbc.SybDriver",
driver_args={
"user": database_user,
"password": database_pass
})
except jpype.dbapi2.Error as err:
print("Error: " + str(err))
cursor = conn.cursor()
cursor.execute("SELECT TOP 1 * FROM table_name")
result = cursor.fetchall()
print(result)