我正在 Azure Databricks 中执行 SQL 操作,为此,我正在导入 ODBC 驱动程序。
下面是代码,它作为初始化脚本上传到集群。
%sh
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
apt-get -y install unixodbc-dev
sudo apt-get install python3-pip -y
pip3 install --upgrade pyodbc
这是用于连接服务器的脚本。
connect_string = "DRIVER={ODBC Driver 17 for SQL Server};"
connect_string += f"SERVER={jdbchostname},"
connect_string += f"{jdbcport};"
connect_string += f"DATABASE={db};"
connect_string += f"UID={username};"
connect_string += f"PWD={pwd}"
conn = pyodbc.connect(connect_string)
cursor = conn.cursor()
此脚本引发错误。
('01000', "[01000] [unixODBC][驱动程序管理器]无法打开 lib 'ODBC SQL Server 驱动程序 17':找不到文件 (0) (SQLDriverConnect)")
您可以使用 JDBC 驱动程序连接到 SQL 服务器,而不是安装 ODBC 驱动程序或添加到初始化脚本中。使用以下代码:
jdbcHostname = "<servername>.database.windows.net"
jdbcPort = 1433
jdbcDatabase = "<dbname>"
jdbcUsername = "<username>"
jdbcPassword = "<password>"
jdbcDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
table = "<tableName>"
jdbcUrl = f"jdbc:sqlserver://{jdbcHostname}:{jdbcPort};databaseName={jdbcDatabase}"
df = spark.read.format("jdbc").option("driver", jdbcDriver).option("url", jdbcUrl).option("dbtable", table).option("user", jdbcUsername).option("password", jdbcPassword).load()
这样就成功连接到SQL服务器了,如下图: