pyodbc: Access primi passi
Installare pyodbc:
pip install pyodbc
Creare un database access
Ci serviremo di un utilissimo modulo chiamato msaccessdb l’utilizzo è molto semplice, importiamo per prima cosa il modulo msaccessdb:
>>> import msaccessdb
creaiamo un database:
>>> db_file = r'path_to_db\test.accdb' >>> msaccessdb.create(db_file)
Il database è stato creato. Ora con pyodbc vediamo alcuni tra i comandi più comuni.
Creare una tabella su database access
Per prima cosa stabiliamo una connessione al database e creiamo il cursore che ci permetterà di lavorare con il database stesso:
>>> import pyodbc >>> driver = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' >>> conn = pyodbc.connect(driver % db_file) >>> cur = conn.cursor() >>>
In questo momento siamo connessi al database e tramite cursor possiamo creare la tabella di prova “persone” con i campi “nome”, “cognome”, “anni”.
>>> sql = "CREATE TABLE persone(nome varchar(16), cognome varchar(32), anni integer)" >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> conn.commit() >>>
controlliamo che la tabella sia stata creata e qui ci viene utile l’oggetto pyodbc.Cursor con i suoi metodi.
Per controllare le tabelle:
>>> for row in cur.tables(): ... print(row.table_name) ... MSysACEs MSysComplexColumns MSysObjects MSysQueries MSysRelationships persone >>>
Per controllare le colonne:
>>> for row in cur.columns(): ... print(row.column_name) ... nome cognome anni
Inserimento dati su database access
Ovviamente finchè la connessione al database è attiva, possiamo continuare con il cursore ad effettuare operazioni sul database. Inseriamo alcuni dati…
>>> sql = "INSERT INTO persone(nome, cognome, anni) VALUES ('Giuseppe', 'Rossi', 40)" >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> conn.commit()
vediamo se i dati sono stati inseriti:
>>> sql = "SELECT * FROM persone WHERE cognome LIKE '%{}%'".format('Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20>
l’oggetto cursore, tramite “description” ci rende disponibile la struttura dei dati trovati:
>>> cur.description (('nome', <class 'str'>, None, 16, 16, 0, True), ('cognome', <class 'str'>, None, 32, 32, 0, True), ('anni', <class 'int'>, None, 10, 10, 0, True)) >>>
con il metodo fetchone() dell’oggetto cursore, otteniamo la prima riga del queryset precedentemente creato:
>>> row = cur.fetchone() >>> row ('Giuseppe', 'Rossi', 40) >>> type(row) <class 'pyodbc.Row'>
a differenza del metodo fetchall() che rende disponibili tutte le righe del query set.
>>> sql = "SELECT * FROM persone WHERE cognome LIKE '%{}%'".format('Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> rows = cur.fetchall() >>> for row in rows: ... print(row.nome, row.cognome, row.anni) ... Giuseppe Rossi 40 Franco Rossi 25
l’oggetto pyodbc.Row è simile ad una tupla ed è comodo poichè è possibile accedere ai dati mediante il nome della colonna:
>>> row ('Franco', 'Rossi', 25) >>> row.nome 'Franco'
Eliminazione dati su database access
Per l’eliminazione di una riga dal database, il procedimento è simile a quelli visti fino ad ora:
>>> sql = "DELETE FROM persone WHERE nome LIKE '%{}%' AND cognome LIKE '%{}%'".format('Franco', 'Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> conn.commit() >>> sql = "SELECT * FROM persone WHERE cognome LIKE '%{}%'".format('Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> rows = cur.fetchall() >>> rows [('Giuseppe', 'Rossi', 40)] >>>
la riga precedente è stata correttamente eliminata.
Aggiornare dati su database access
>>> sql = "UPDATE persone SET nome='%s', anni='%s' WHERE cognome='%s'" % ('Giovanni', 18, 'Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> conn.commit() >>> sql = "SELECT * FROM persone WHERE cognome LIKE '%{}%'".format('Rossi') >>> cur.execute(sql) <pyodbc.Cursor object at 0x02091D20> >>> row = cur.fetchone() >>> row ('Giovanni', 'Rossi', 18)
Questi sono solo alcuni dei comandi più semplici per giocare con un database Access,
per andare nello specifico consultare il sito del progetto pyodbc.
Commenti recenti