Archivio

Posts Tagged ‘pyodbc’

pyodbc: Access primi passi

11 Aprile 2018 Commenti chiusi

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.

Categorie:python Tag: ,