Utilizzare gli Active X data objects con
Python è molto semplice.
Per chi ha gia pratica del loro utilizzo nelle
ASP, o in Windows Scripting Host la cosa presenterà difficoltà
minime.
Il funzionamento ovviamente sarà garantito
solo sulla piattaforma Win32 poiché questa è una tecnologia
Microsoft.
Prima di operare ecco cosa è necessario
avere.
Il codice che estrae i dati e li stampa nella interactive
window, da una ipotetica tabella miaTab è il seguente
import win32com.client
dataconn=win32com.client.Dispatch('adodb.connection')
rs=win32com.client.Dispatch('adodb.recordset')
strConn="Provider =
Microsoft.Jet.OLEDB.4.0;Data Source=prova.mdb"
dataconn.Open (strConn)
sql="select * from miaTab ;"
rs.Open(sql, dataconn)
while not
rs.eof:
a=rs.Fields("test").Value
print a.encode("latin1")
rs.MoveNext()
del rs
del dataconn
Analizziamo lo script in dettaglio.
La prima riga serve ad importare il modulo
client della libreria win32 che implementa l'interfaccia COM per
Python.
Nella seconda riga
viene istanziata la connessione ADO attraverso il metodo Dispatch del client
win32com, e nella terza allo stesso modo si crea un'istanza
dell'adodb.recordset.
Successivamente (come per le normali connessioni in ASP
o WSH), si apre la connessione (in questo caso una OLEDb verso un database di
Access) e si stampa a schermo il valore del campo "test" del
recordset.
Una piccola attenzione riguarda
l'assegnazione del valore del campo "test" alla variabile
a.
Infatti se non si specifica che si sta passando il
Value del campo, il Python memorizzerà nella variabile
a un puntatore al recordset e questo
manderà in crash inesorabilmente lo script nel momento in cui, stampando a
schermo il risultato dell'interrogazione del Database, faremo l'encoding in
latin1 (operazione necessaria per la gestione dei caratteri
unicode in Python.
Le ultime due righe servono solo a cancellare le
istanze dalla memoria e liberare risorse.
Affinchè il tutto funzioni (poiché
il Python individua i costrutti logici per indentazione) è fondamentale che le
tabulazioni siano precise.