在 azure databrick 中使用 pyodbc 连接 SQL 服务器

using pyodbc in azure databrick for connecting with SQL server

import pyodbc    

pyodbc.connect('Driver={SQL SERVER};'
                  'Server=server name;'
                  'Database = database name;'
                  'UID='my uid;'
                  'PWD= 'my password;'
                  'Authentication = ActiveDirectoryPassword')

运行 databrick notebook 中的上述代码出现以下错误

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL SERVER' : file not found (0) (SQLDriverConnect)")

默认情况下,Azure Databricks 没有安装 ODBC 驱动程序。

对于 SQL 服务器: 您可以使用以下脚本解决问题

sudo apt-get -q -y install unixodbc unixodbc-dev
sudo apt-get -q -y install python3-dev
sudo pip install --upgrade pip
pip install pyodbc
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 msodbcsql

对于 Azure SQL 数据库: 运行 在单个单元格中执行以下命令以在 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
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get -q -y install msodbcsql17

您发布的内容看起来像是直接的 Python 代码。在 Databricks 环境中,情况与在本地计算机上略有不同。

像这样尝试。

import pyodbc
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '<password>'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
row = cursor.fetchone()
while row:
    print (str(row[0]) + " " + str(row[1]))
    row = cursor.fetchone()