Un database relazionale gestito tramite MySQL è composto da una o più tabelle destinate ad ospitare dei dati, questi ultimi vengono ordinati in record (i pratica le righe delle tabelle) e rappresentano i valori di specifici associati ad unità di base, ognuna definita da un nome, dette campi (le colonne delle tabelle).
In questa lezione scopriremo come Python possa essere utilizzato per la creazione di una tabella e per la definizione dei campi all’interno di essa.
Creazione della tabella
Il codice necessario per la creazione di una prima tabella con Python non è molto dissimile da quello utilizzato in precedenza per la generazione del database "anagrafiche". In questo caso però tra i parametri passati al metodo connect() è presente anche il nome del database, mentre l’istruzione SQL da lanciare al Database Engine è basata sul comando CREATE TABLE seguito nell’ordine dal nome della tabella desiderata e da quelli dei campi che essa è destinata a contenere. Da notare come per ogni campo viene specificato anche il tipo di dato associato e, in questo caso limitatamente a quelli alfanumerici, anche la lunghezza massima dei valori eventualmente ospitati.
# 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"
)
# Generazione del cursore
cursore = connessione.cursor()
# Creazione della tabella e inserimento dei campi
cursore.execute("CREATE TABLE nominativi (id_nominativi INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(30), cognome VARCHAR(30), parentela VARCHAR(20))")
I campi creati tramite lo script sono i seguenti:
- "id_nominativi": un campo di tipo auto-incrementale che funge da chiave primaria;
- "nome": campo alfanumerico della lunghezza massima di 30 caratteri;
- "cognome": campo alfanumerico della lunghezza massima di 30 caratteri;
- "parentela": campo alfanumerico della lunghezza massima di 20 caratteri.
Mentre il ruolo dei campi alfanumerici è abbastanza intuitivo, per quanto riguarda il campo auto-incrementale di tipo intero è utile ricordare che esso ha la caratteristica di non dover essere valorizzato manualmente, sarà il DBMS stesso ad inserire in esso un nuovo valore (tramite un incremento unitario rispetto al quello precedentemente registrato) in corrispondenza dell’archiviazione di ogni record aggiuntivo.
Un campo chiave primaria (PRIMARY KEY) è inoltre un campo che non può contenere valori nulli o ripetuti e ciascuna tabella può presentare al massimo un campo di questo tipo. I campi auto-incrementali e chiavi primarie sono impiegati generalmente come identificatori dei record semplificando le operazioni di estrazione, aggiornamento, cancellazione e ricerca.
Verificare l’esistenza di una tabella e dei campi
Dopo aver eseguito lo script per la creazione della tabella "nominativi" e dei relativi campi, è possibile verificare la presenza della prima nel database "anagrafiche" tramite il comando SHOW TABLES utilizzato senza ulteriori argomenti. Una volta eseguita tale istruzione è sufficiente realizzare un semplice ciclo for con cui visualizzare tutte le tabelle eventualmente generate all’interno della base di dati passata come parametro di connessione al metodo connect():
# Comando SQL per la visualizzazione delle tabelle
cursore.execute("SHOW TABLES")
# Visualizzazione delle tabelle
for i in cursore:
print(i)
Nel caso del nostro esempio l’output del ciclo mostrerà naturalmente l’unica tabella disponibile.
Se invece si desidera visualizzare i nomi dei campi presenti in una tabella, il comando SQL da utilizzare è SHOW FIELDS FROM seguito dal nome di quest’ultima nonché dal solito ciclo che consente di restituire a video tutti i valori ottenuti.
# Comando SQL per la visualizzazione dei campi
cursore.execute("SHOW FIELDS FROM nominativi")
# Visualizzazione dei campi
for i in cursore:
print(i)
L’esecuzione dell’istruzione precedente determinerà una stampa a video di tutti i campi contenuti dalla tabella "nominativi", del tipo di dato attribuito a ciascuno di essi e delle loro proprietà.
Inserire un nuovo campo in una tabella
Dopo aver creato una tabella può sempre presentarsi l’esigenza di modificarne la struttura, ad esempio per l’aggiunta di un nuovo campo. A questo scopo il linguaggio SQL mette a disposizione due comandi: ALTER TABLE, seguito dal nome della tabella su cui si desidera intervenire, e ADD COLUMN che accetta come parametro il campo da aggiungere seguito dal suo tipo di dato e da eventuali altri attributi.
# Comando SQL per l'inserimento di un nuvo campo
cursore.execute("ALTER TABLE nominativi ADD COLUMN occupazione VARCHAR(255)")
Nel caso specifico dell’espressione appena mostrata l’istruzione inviata al DBMS porta alla generazione nella tabella "nominativi" di un campo denominato "occupazione" associato al tipo di dato VARCHAR dalla lunghezza massima di 255 caratteri.
Lanciando nuovamente l’istruzione "SHOW FIELDS FROM nominativi" il nuovo campo risulterà disponibile all’interno della tabella.