MySQL è un DBMS (Database Management System) di tipo relazionale, ciò significa che le informazioni archviate e gestite attraverso di esso sono in correlazione tra loro in base a delle proprietà. Per interagire con questa piattaforma è disponibile il linguaggio SQL (Structured Query Language) che è di tipo dichiarativo (o logico) in quanto caratterizzato dal fatto che le istruzioni espresse grazie a dei comandi standard rappresentano delle clausole con cui definire una relazione presente tra i dati e, nel contempo, fra i dati e il risultato atteso dall’utilizzatore.
Le istruzioni SQL possono essere inviate manualmente al Database Engine, digitandole ad esempio tramite il Prompt dei comandi di Windows o il Terminale delle distribuzioni Linux, oppure generate attraverso applicazioni e script scritti in svariati linguaggi tra cui Python. Nel corso delle prossime lezioni analizzeremo le procedure necessarie per connettersi a MySQL, creare database e tabelle, inserire dati in esse e manipolarli utilizzando quest’ultimo.
Installazione del connettore
Python non s’interfaccia nativamente a MySQL e per comunicare con esso è necessario disporre di un apposito connettore (mysql-connector-python) la cui installazione è richiesta prima di effettuare qualsiasi altro tipo di operazione. Per superare questa fase la soluzione migliore è quella di ricorrere al package manager pip, che si occupa anche della gestione delle dipendenze, e ricorrere alla seguente istruzione da lanciare a partire dalla directory in cui è stato installato Python:
C:Python>python -m pip install mysql-connector-python
In alternativa è possibile scaricare il connettore dal sito ufficiale di Oracle tenendo conto che il package da utilizzare cambia a seconda del sistema operativo di destinazione. Sono infatti disponibili le versioni per Windows con architetture a 32 e 64 bit, varie distribuzioni di Linux (Ubuntu, Debian, SUSE, Red Hat, Fedora..) e persino il codice sorgente Platform Independent per l’installazione tramite compilazione.
Prima di valutare questa seconda opzione è però utile considerare che non sempre tale connettore viene aggiornato in modo sufficientemente rapido da essere compatibile con le release di Python più recenti.
Per verificare il buon funzionamento del connettore appena installato è sufficiente importarlo come un qualsiasi altro modulo di Python tramite la keyword import:
# Test di funzionamento del connettore MySQL<br>import mysql.connector
Se tutto dovesse andare per il meglio l’interprete del linguaggio si limiterà a non restituire alcune messaggio di errore. A tal proposito è bene sottolineare che i file ".py" dai quali lanciare comandi verso il Database Engine non devono essere salvati con nomi come "mysql.py" o "MySQL.py", altrimenti il sistema cercherà di caricare il modulo da questi ultimi e la sua importazione non potrà che fallire.
Prima connessione a MySQL
Una volta installato il connettore si può procedere alla connessione con il DBMS che è il punto di partenza per l’interazione con quest’ultimo. Per chiarire il funzionamento di questo passaggio partiamo dal nostro codice d’esempio per il test di connessione:
# Test di funzionamento del connettore MySQL
import mysql.connector
# Test di connessione a MySQL
connessione = mysql.connector.connect(
# Parametri per la connessione
host="localhost",
user="nome-utente",
password="password"
)
# Stampa dell'handle di connessione
print(connessione)
Il risultato atteso dall’esecuzione dello script proposto in precedenza dovrebbe essere simile a quello rappresentato dalla figura successiva:
Dopo l’importazione del modulo per la connessione il metodo connect() introduce i parametri di connessione che sono nell’ordine:
- l’host: cioè l’indirizzo del sistema ospitante, nel caso specifico localhost;
- l’utente MySQL: lo username dell’utilizzatore che si connette a MySQL;
- la password: cioè la parola chiave che permette all’utente MySQL di autenticarsi.
Come da immagine precedente, se effettuato correttamente il test di connessione deve restituire in output l’oggetto generato da quest’ultima.
Creazione del database
Una volta stabilita con successo la connessione a MySQL è possibile creare un primo database destinato ad ospitare i dati che si desidera gestire. Per far questo è necessario sfruttare il comando SQL CREATE DATABASE seguito appunto dal nome della base di dati da generare. Nell’esempio seguente viene mostrato un semplice script per la creazione di un database chiamato "anagrafiche":
# Importazione del modulo MySQL
import mysql.connector
# Connessione a MySQL
connessione = mysql.connector.connect(
# Parametri per la connessione
host="localhost",
user="nome-utente",
password="password"
)
# Generazione del cursore
cursore = connessione.cursor()
# Creazione del database
cursore.execute("CREATE DATABASE anagrafiche")
Nel codice proposto il metodo cursor() consente di istanziare un cursore a cui associare l’handle di connessione che potrà essere richiamato ogni volta che si desidera indirizzare un’istruzione SQL al DBMS. Nel caso specifico l’handle viene utilizzato per la chiamata al metodo execute() a cui passare come argomento l’istruzione basata sul comando CREATE DATABASE.
Verificare l’esistenza di un database
Per verificare l’avvenuta generazione di un database è sufficiente passare il nome di quest’ultimo come parametro al metodo connect(), motivo per il quale il test di connessione precedentemente analizzato può essere riproposto in questo modo:
# Importazione del modulo MySQL
import mysql.connector
# Connessione a MySQL
connessione = mysql.connector.connect(
# Parametri per la connessione
host="localhost",
user="nome-utente",
password="password"
db="anagrafiche"
)
In presenza di un database effettivamente denominato "anagrafiche" l’esecuzione del codice non dovrebbe produrre alcun output, se però si desidera ottenere una notifica esplicita della sua disponibilità è opportuno ricorrere al comando SQL SHOW DATABASES che consente di elencare tutti i database gestiti dal DBMS al momento corrente.
# Importazione del modulo MySQL
import mysql.connector
# Connessione a MySQL
connessione = mysql.connector.connect(
# Parametri per la connessione
host="localhost",
user="nome-utente",
password="password"
)
# Generazione del cursore
cursore = connessione.cursor()
# Comando SQL per la visualizzazione dei database
cursore.execute("SHOW DATABASES")
# Visualizzazione dei database
for i in cursore:
print(i)
Il ciclo for utilizzato per generare la lista dei database renderà quindi visibile il nome della base di dati "anagrafiche", l’unica creata fino ad ora, e quelli dei database di default di MySQL.