Nota: lezione in aggiornamento
Ogni linguaggio di programmazione, degno di tale nome, deve avere degli strumenti per accedere ai maggiori sistemi di gestione di base dati relazionali. Anche python dispone di strumenti atti a risolvere questa problematica.
A tale scopo è stata sviluppata una raccolta di moduli, denominata "DB-API".
Tale libreria ha lo scopo di creare un interfaccia unica di accesso ai database, indipendentemente dal tipo di sistema utilizzato. Per fare questo sono stati sviluppati diversi strati:
- Uno strato unico di accesso ai dati, composto da un insieme di funzioni standard.
- Diversi drivers specifici per ogni tipo di database. A tal proposito, esistono drivers per mySQL, Informix, DB2 e anche per ODBC.
Per accedere, ad esempio, a qualsiasi fonte dati ODBC, è necessario caricare l'apposito modulo (chiamato "odbc").
Nel caso di odbc, l'operazione è estremamente semplice. Infatti, una volta installate le win32 extensions si ha gia' il modulo odbc disponibile.
Vi illustro di seguito un esempio con il quale utilizzo il linguaggio SQL per fare delle interrogazioni ad un database.
Facciamo le seguenti ipotesi di lavoro, riferite chiaramente all'ambiente Microsoft Windows:
- Ho creato un database in Microsoft Access denominato "db_articoli.mdb".
- Ho creato un DSN (Data Source Name) con ODBC Manager, denominato "articoli" (vedi il disegno). Esso associa il nome logico "articoli" al file fisico "db_articoli.mdb".
- Il database contiene una tabella, denominata "elenco_articoli", con due campi: codice e descrizione.
Voglio costruire un programma che mostra tutti i record della tabella "elenco_articoli". Ecco il semplice listato che risolve questo problema:
import odbc
try:
s = odbc.odbc('articoli') # mi collego al DSN
cur = s.cursor()
cur.execute('select * from elenco_articoli')
rec = cur.fetchall()
print 'Codice -- Descrizione n'
for i in rec:
print i[0] + ' -- ' + i[1] + 'n'
except:
print 'errore'
Il risultato del programma potrebbe essere il seguente:
Codice -- Descrizione
233412 -- matita
567543 -- quaderno
533232 -- gomma
Analizzando il codice si possono fare le seguenti osservazioni:
- la variabile "s" rappresenta l'oggetto database. La variabile è stata inizializzata utilizzando il modulo odbc.
- la variabile "cur" rappresenta un cursore sul database. Quindi attraverso questo cursore è possibile navigare nella struttura del database.
- attraverso il metodo "execute" è possibile eseguire una richiesta SQL.
- Il metodo "fetchall()" restituisce una lista contenente tutti i record risultanti dalla query SQL. Ogni elemento della lista "rec" è a sua volta una lista con i valori dei campi. In questo caso i campi sono due:
- Codice, nella posizione 0;
- Descrizione, nella posizione 1;
- Con un semplice ciclo posso stampare tutti i record della tabella.
Tutte le funzioni utilizzate fanno parte dello strato standard definito dalla libreria DB-API. Questo significa che il codice non cambia se si utilizza un altro Database al posto di Microsoft Access. L'unico cambiamento riguarda l'utilizzo del modulo apposito.