Come collegare Python ad un database Access usando Pyodbc

Cerca

Da quando l’analitica dei dati è diventata una materia di vitale importanza, Python e le sue prodigiose librerie si sono affermate come punto di riferimento tra i Data Analyst. Parlare di dati vuol dire anche essere in grado di interrogare database. In questo scenario dobbiamo integrare un database Access all’interno di un nostro progetto Python. Per fare ciò ricorriamo alla libreria pyodbc.

Soluzione

Apriamo il command prompt ed installiamo la libreria pyodbc con il seguente comando:

				
					pip install pyodbc
				
			

Una cosa da notare in anticipo è che se si ha MS Access a 64 bit è necessario utilizzare Python a 64 bit. La combinazione di Python a 64 bit con Access a 32 bit genererà un errore quando ci si tenta di connettere. Il motivo è che ci sono due diversi driver Access ODBC di Microsoft:

  1. Old Driver (32-bit) – Microsoft Access Driver (*.mdb): funziona con 32-bit Python
  2. New Driver (64-bit) – Microsoft Access Driver (*.mdb, *.accdb): funziona con 64-bit Python

Se sulla propria macchina si ha una versione di Microsoft Office installata, si dovrebbe già avere a bordo uno dei driver. Nel caso in cui non si dovesse disporre del driver, si può scaricarne una versione standalone dal sito di Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=54920

Per verificare quale versione è installata sul proprio computer eseguire i seguenti comandi nell’interprete Python:

				
					>>>import pyodbc
>>>[i for i in pyodbc.drivers() if i.startswith('Microsoft Access Driver')]
['Microsoft Access Driver (*.mdb, *.accdb)']
				
			

Vengono scansiti tutti i driver ODBC disponibili e vengono restituiti solo quelli che iniziano con “Driver Microsoft Access”. Il risultato precedente mostra che sul mio computer c’è installato il driver Access a 64 bit.

Connettere Python ad un Database Access

Per connettersi a un database, abbiamo bisogno di una stringa di connessione, ossia un puntatore di testo che dice a Python dove trovare il database. Per MS Access, è necessario specificare anche il tipo di driver ODBC (32 bit o 64 bit) nella stringa di connessione.

Assicurarsi inoltre di chiudere il database di MS Access prima di effettuare la connessione, altrimenti si verificherà un errore.

				
					conn_str = (r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
            r'DBQ=E:\PythonInOffice\python_connect_to_ms_access\database.accdb;')
conn = pyodbc.connect(conn_str)
				
			

Trovare tutte le tabelle e le query nel database di MS Access

Possiamo scorrere tutte le tabelle all’interno del database di Access e filtrare per tabelle di dati (“TABLE”) o query (“VIEW”). Ma seriamente, se possiamo usare Python perché anche preoccuparsi delle query di Access ¯\_(ツ)_/¯

				
					cursor = conn.cursor()
for i in cursor.tables(tableType='TABLE'):
    print(i.table_name)

for i in cursor.tables(tableType='VIEW'):
    print(i.table_name)
				
			

Interrogare il database di MS Access

Per interagire con un database, dobbiamo usare un linguaggio che esso comprende. Ciò significa che dobbiamo usare SQL. Questo non è un tutorial SQL, quindi non tratteremo i dettagli. Se hai bisogno di aiuto con SQL, w3schools è un ottimo sito a cui fare riferimento.

				
					#Eseguire una query SQL
cursor.execute('SELECT * FROM table_name')

#Ottenere una riga
one_row = cursor.fetchone()

#Ottenere tutte le righe
rows = cursor.fetchall()
				
			

Case Study

Ipotiziamo di avere una tabella products così strutturata

product_idproduct_nameprice
1Computer800
2Printer150
3Desk400
4Chair120
5Tablet300

Se volessimo selezionare tutti i dati in essa contenuti, è sufficiente utilizzare questa query SQL

				
					import pyodbc

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\MyUser\Desktop\test_database.accdb;')
cursor = conn.cursor()
cursor.execute('SELECT * FROM products')

for row in cursor.fetchall():
    print(row)
				
			
Output:

Come risultato otterremo nella nostra shell un output di questo tipo

				
					(1, 'Computer', 800)
(2, 'Printer', 150)
(3, 'Desk', 400)
(4, 'Chair', 120)
(5, 'Tablet', 300)
				
			

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Most Recent

Come aggiornare mailcow

In questo scenario viene illustrato come eseguire l’aggiornamento di un’istanza di mailcow dockerized utilizzando i tools in esso integrati. Aggiornamento automatico Nella directory di mailcow-dockerized

Partners