Connessione a database SQL Server da Linux con Python

python-logoPer connetterci ad un database SQL Server da Linux abbiamo due strade.
La prima è quella di utilizzare ODBC e di installare un driver adatto alla connessione con SQL Server, ad esempio FreeTDS.
Per installarlo, usiamo APT (valido su Ubuntu e altre distribuzioni basate su questo package manager):

$ sudo apt-get -y install freetds-bin tdsodbc unixodbc

A questo punto verifichiamo il contenuto del file /etc/odbcinst.ini (possono essere presenti altre sezioni, nel caso aveste installato altri driver ODBC):

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

Configuriamo il file /etc/freetds/freetds.conf (percorso valido per Ubuntu 14.04, potrebbe variare leggermente su altre distibuzioni):

[DATABASE]
host = IP_OR_HOSTNAME_DB_SERVER
port = 1433
tds version = 8.0

La porta TCP 1433 è la porta di default per le connessioni dirette ad SQL Server. Potrebbe essere necessario abilitare in modo esplicito l’apertura di questa porta.
Non ci resta che aggiungere il datasource all’interno del file /etc/odbc.ini:

[DSN_DATABASE]
Description = Descrizione del DSN
Driver = FreeTDS
Servername = DATABASE
Database = DATABASE_NAME

A questo punto il DSN è utilizzabile, quindi utilizziamo il Python per creare una connessione:

import pyodbc
user = 'sa'
password = 'password'
conn =  pyodbc.connect('DSN=DSN_DATABASE;UID='+user+';PWD='+password);
cursor = conn.cursor()
cursor.execute("""SELECT TOP 10 * FROM TABLE """)
multiple_rows = [dict(zip([column[0] for column in cursor.description], row)) for row in cursor.fetchall()]    
for row in multiple_rows:
	if row is not None:
		print row['ID']

Come si può vedere, prima di utilizzare il set di risultati ottenuti, trasformiamo l’array con indice numerico in array con indice testuale, per accedere alla colonna direttamente tramite il proprio nome.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...