如何在CentOS中安装jdbc并在python函数中使用包?

2024-09-28 22:22:00 发布

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

我不熟悉在编写代码时使用linux实例。我正在使用CentOS,正在编写一个依赖于连接SQL数据库的python脚本。我编写的连接到的函数如下所示:

import jaydebeapi
import pandas as pd 
import json 
from query import p1

def get_conn(conn_name, conf_file = 'data.json' ):
    conf_dict = json.load(open(conf_file, 'r'))
    c = conf_dict[conn_name.lower()]
    return (jaydebeapi.connect(jclassname=c['driver_name'], url=c['jdbc_url'],
                driver_args=[c['user'], c['passwd']])
           )

conn_scd = get_conn('ora_pdmsn')
scd_df = pd.read_sql(p1, conn_scd)
conn_scd.close()

print(scd_df)

这将导致以下错误:

TypeError: Class com.microsoft.sqlserver.jdbc.SqlServerDriver is not found

我试图找到在centOS中安装此驱动程序的正确方法,但似乎没有任何效果。有什么建议吗?下面是my JSON.data的示例:

{"mssql":
    {   "conn_name":"ora_pdmsn", "driver_name":"com.microsoft.sqlserver.jdbc.SQLServerDriver",
        "jdbc_url":"internal_url",
        "user":"name", "passwd":"pass",
        "test_sql":"select CURRENT_TIMESTAMP as ts"
    }
}


Tags: nameimportjsonurlgetconfasdriver
1条回答
网友
1楼 · 发布于 2024-09-28 22:22:00

jaydebeapi需要访问包含您想要使用的JDBC驱动程序的相关JAR(Java归档)文件。因此,您需要确保JDBC驱动程序位于Java类路径上,以便jaydebeapi可以在运行程序时使用它

当然,这也意味着您需要安装Java。java -version命令可以为您检查


您已经有相关的JDBCJAR文件了吗?您需要的一个取决于:

  • 您正在使用的MS-SQL Server版本,以及
  • 已安装的Java版本

您可以下载驱动程序from here的版本。这将为您提供3个不同文件中的9.2版驱动程序,用于3个版本的Java(8、11和15)

(如果您有较旧版本的SQL Server,则此版本的JDBC驱动程序可能不适合您。)

解压缩zip文件并在sqljdbc_9.2/enu目录中找到JAR文件。JAR文件的名称表示它支持的Java版本:

mssql-jdbc-9.2.1.jre8.jar
mssql-jdbc-9.2.1.jre11.jar
mssql-jdbc-9.2.1.jre15.jar

在获得正确的JAR文件后,可以直接在Python连接代码中引用它的位置,作为额外的参数

以下是我的版本(在我的例子中,使用MySQL,因为我没有MS-SQL Server)——为了简单起见,我没有使用JSON文件:

jaydebeapi.connect("com.mysql.cj.jdbc.Driver",
                   "jdbc:mysql://localhost:3306/my_db",
                   ["myuser", "mypass"],
                   "/path/to/mysql-connector-java-8.0.25.jar")

当然,您需要将所有这些详细信息从my MySQL详细信息更改为MS-SQL Server详细信息,但请注意最后一个指向JAR文件的值


或者,您可以set the Java classpath,并使用它,而不是在代码中删除JAR文件位置。在本例中,类路径将指向一个目录,该目录将包含JAR文件。我觉得这种方法不太方便,但这取决于你


SQLServerJDBC驱动程序的另一个选项是使用JTD-请参见here。我在SQL Server的较旧版本中使用了此选项,没有任何问题

相关问题 更多 >