我是编码时使用 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 中安装此驱动程序的正确方法,但似乎没有任何效果。有什么建议吗?我的 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"
}
}
最佳答案
jaydebeapi 需要访问包含您要使用的 JDBC 驱动程序的相关 JAR(Java 存档)文件。因此,您需要确保 JDBC 驱动程序位于 Java 类路径中,以便 jaydebeapi 在您运行程序时可以使用它。
当然,这也意味着您需要安装 Java。 java -version
命令可以为您检查。
您是否已有相关的 JDBC JAR 文件?您需要的取决于:
您可以下载驱动程序的版本from here .这为您提供了 9.2 版本的驱动程序,在 3 个不同的文件中,用于 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")
当然,您需要将所有这些详细信息从我的 MySQL 详细信息更改为您的 MS-SQL Server 详细信息 - 但请注意指向 JAR 文件的最后一个值。或者,您可以 set the Java classpath , 并使用它,而不是在代码中提供 JAR 文件位置。在这种情况下,类路径将指向一个目录,该目录将包含 JAR 文件。我发现这种方法不太方便,但这取决于你。
SQL Server JDBC 驱动程序的另一个选项是使用 jTDS - 请参阅 here .我已经将它与旧版本的 SQL Server 一起使用,没有任何问题。
关于python - 如何在 CentOS 中安装 jdbc 并在 python 函数中使用包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68007546/