我正在尝试使用 pyodbc 从 databricks 连接到 sql server,面临以下问题
import pyodbc
sql_server_url='server_url'
sqlDB='db-dev'
SQL_DB_USER='user'
SQL_DB_PASS='123'
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=' + sql_server_url +';DATABASE=' + sqlDB + ';UID='+SQL_DB_USER+';PWD='+SQL_DB_PASS)
错误:('01000',“[01000] [unixODBC][驱动程序管理器]无法打开 lib 'ODBC Driver 17 for SQL Server':找不到文件 (0) (SQLDriverConnect)”)
所以我尝试在 bash 命令下运行
%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
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get -q -y install msodbcsql17
E:该命令只能由root用户使用。 /bin/bash:第 1 行:/etc/apt/sources.list.d/mssql-release.list:权限被拒绝 sudo:需要终端读取密码;使用 -S 选项从标准输入读取或配置askpass helper sudo:需要终端读取密码;使用 -S 选项从标准输入读取或配置askpass helper
相同的代码适用于标准 databricks 版本,但不适用于为运行时版本 11.3 启用的 Unity 目录。当我尝试运行此命令时,我仍然具有超级管理员访问权限,它说权限被拒绝。
有人可以建议如何安装这些 odbc 驱动程序吗?
问题可能是由于我在下面的代码中尝试的命令中使用了
sudo
,并且它成功地为我安装了。
示例代码:
%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
另请参阅解决类似问题的类似线程。
我自己也遇到了这个问题。有趣的是,当我通过 UI 创建集群并运行安装了 MSODBC 的初始化脚本时,它运行良好。当我通过 API 通过 DevOps 版本创建集群时,初始化脚本因此问题而失败。
这让我相信权限在 UC 中发挥了作用。我发现 init 脚本在启用 UC 的集群上工作的方式是使用创建集群的用户的权限。另一方面,包(whl、maven 等)使用运行集群的用户的权限。
由于我在某个版本中通过 API 创建集群,因此该集群是使用服务主体创建的。我向服务主体授予了对包含保存初始化脚本的卷的架构的读取卷/执行/修改权限,并在目录上使用目录/使用架构/修改/执行。将这些权限分配给用于通过 API 创建集群的服务主体后,init 脚本成功运行。