This post is in regards to connecting to SQL Server using pyodbc.
Install package
pip install pyodbc
If you are running in Databricks then the current driver will be “{ODBC Driver 17 for SQL Server}”.
If you are running in Synapse then the current driver will be “{ODBC Driver 18 for SQL Server}”.
Check pyodbc Version
import pyodbc pyodbc.drivers()
Check Which Version of pyodbc in Databricks
%sh cat /etc/odbcinst.ini
Install Databricks driver 17
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/20.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
Connect using SQL Auth
I do not recommend SQL Auth
import pyodbc secret = "<GET SECRET SECURELY>" connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};Server=tcp:<SERVER_NAME>;PORT=<PORT>;Database=<DATABASE>;Uid=<USER>;Pwd=<SECRET>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=<TIMEOUT>;')
Connect Using Domain Auth
import pyodbc secret = "<GET SECRET SECURELY>" connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};Server=tcp:<SERVER_NAME>;PORT=<PORT>;Database=<DATABASE>;Uid=<USER>;Pwd=<SECRET>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=<TIMEOUT>;Authentication=ActiveDirectoryPassword')
Connect using Azure SPN
pip install msal
import struct import msal global_token_cache = msal.TokenCache() secret = "<GET SECRET SECURELY>" global_spn_app = msal.ConfidentialClientApplication( <CLIENT_ID>, Authority='https://login.microsoftonline.com/<TENANT_ID>', client_credential=secret, token_cache=global_token_cache, ) result = global_spn_app.acquire_token_for_client(scopes=['https://database.windows.net//.default']) SQL_COPT_SS_ACCESS_TOKEN = 1256 token = bytes(result['access_token'], 'utf-8') exptoken = b""; for i in token: exptoken += bytes({i}); exptoken += bytes(1); token_struct = struct.pack("=i", len(exptoken)) + exptoken; connection = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};Server=tcp:<SERVER_NAME>;PORT=<PORT>;Database=<DATABASE>;Uid=<USER>;Pwd=<SECRET>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=<TIMEOUT>;' attrs_before = { SQL_COPT_SS_ACCESS_TOKEN:tokenstruct })
Once you have the connection you can setup the cursor.
cursor = connection.cursor()
Then execute a command
command = "<COMMAND>" params = () cursor.execute(command, params) connection.commit()
After you Are finish Close
cursor.close() connection.close()