Introduzione a MySQL
Impara a connettere Python a MySQL con mysql-connector-python. Installazione, connessione, creazione di database ed esecuzione di query.
Python può comunicare con i database MySQL tramite il driver ufficiale MySQL Connector/Python. Questo capitolo mostra come installare il driver, stabilire una connessione, creare un database ed eseguire le prime query — fornendo una base solida prima di passare a creare tabelle, inserire righe e interrogare i dati.
Cosa ti serve
Prima di scrivere qualsiasi codice hai bisogno di due cose:
- Python 3.7 o versioni successive installato sul tuo computer.
- Un server MySQL in esecuzione — sia un'installazione locale (MySQL Community Server) sia un'istanza cloud (PlanetScale, Amazon RDS, ecc.).
Non è necessario creare un database in anticipo; ne creerai uno da Python in una sezione successiva.
Installazione di MySQL Connector/Python
MySQL Connector/Python è il driver MySQL ufficiale mantenuto da Oracle. Installalo con pip:
pip install mysql-connector-pythonVerifica l'installazione:
import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0Se viene visualizzato un numero di versione, il driver è pronto all'uso.
Perché mysql-connector-python e non PyMySQL?
Entrambi i driver funzionano, ma mysql-connector-python è il driver ufficialmente supportato da Oracle. Utilizza un'implementazione pure-Python per impostazione predefinita e, facoltativamente, un'estensione C per prestazioni migliori. PyMySQL è una popolare alternativa della community con un'API quasi identica. I capitoli di questa sezione usano mysql-connector-python.
Connessione a un server MySQL
Usa mysql.connector.connect() per aprire una connessione. Passa le tue credenziali come argomenti con nome:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
if connection.is_connected():
print("Connected to MySQL Server")
connection.close()Sostituisci yourusername e yourpassword con le tue credenziali effettive. Il valore di host è "localhost" quando MySQL è in esecuzione sulla stessa macchina; usa un indirizzo IP o un hostname per un server remoto.
Tenere le credenziali fuori dal codice sorgente
Inserire le password direttamente negli script è un rischio per la sicurezza. Memorizzale nelle variabili d'ambiente e leggile in fase di esecuzione:
import mysql.connector
import os
connection = mysql.connector.connect(
host=os.environ.get("MYSQL_HOST", "localhost"),
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD")
)
print("Connected:", connection.is_connected())
connection.close()Imposta le variabili nella tua shell prima di eseguire lo script:
export MYSQL_USER=yourusername
export MYSQL_PASSWORD=yourpassword
python connect.pyCreazione di un database
Una volta connessi al server (senza specificare un database), puoi crearne uno con un'istruzione CREATE DATABASE. Eseguila tramite un cursore — un oggetto che invia comandi SQL e recupera i risultati.
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created")
cursor.close()
connection.close()La clausola IF NOT EXISTS previene un errore se il database esiste già.
Elencare i database
Puoi verificare che il database sia stato creato elencando tutti i database presenti sul server:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
for db in cursor:
print(db)
cursor.close()
connection.close()Ogni riga viene restituita come tupla, quindi vedrai un output simile a:
('information_schema',)
('mydatabase',)
('mysql',)
('performance_schema',)
('sys',)Connessione a un database specifico
Una volta che il database esiste, includi il parametro database durante la connessione in modo che tutte le query successive vengano eseguite su di esso:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Database in use:", connection.database)
connection.close()Utilizzo di un context manager (pattern consigliato)
Chiamare manualmente .close() su ogni connessione e cursore è soggetto a errori — se si verifica un'eccezione prima di .close(), la connessione rimane aperta. Usa un blocco try/finally, o meglio ancora, racchiudi il cursore in un'istruzione with:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
try:
with connection.cursor() as cursor:
cursor.execute("SELECT DATABASE()")
row = cursor.fetchone()
print("Current database:", row[0])
finally:
connection.close()Il blocco with chiude automaticamente il cursore quando il blocco termina, anche se viene sollevata un'eccezione.
Gestione degli errori di connessione
Problemi di rete o credenziali errate generano mysql.connector.Error. Gestisci sempre questa eccezione nel codice in produzione:
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Connection successful")
except Error as e:
print(f"Error connecting to MySQL: {e}")
finally:
if "connection" in dir() and connection.is_connected():
connection.close()
print("Connection closed")Errori comuni che potresti incontrare:
| Codice errore | Significato |
|---|---|
| 1045 | Accesso negato — nome utente o password errati |
| 2003 | Impossibile connettersi all'host — server non in esecuzione o host/porta errati |
| 1049 | Database sconosciuto — il nome database non esiste |
Riferimento rapido: parametri di connessione
| Parametro | Tipo | Descrizione |
|---|---|---|
host | str | Hostname o IP del server MySQL (predefinito "127.0.0.1") |
port | int | Porta MySQL (predefinita 3306) |
user | str | Nome utente MySQL |
password | str | Password MySQL |
database | str | Database da selezionare alla connessione |
charset | str | Set di caratteri (predefinito "utf8mb4") |
connect_timeout | int | Secondi di attesa per la connessione (predefinito 10) |
use_pure | bool | True = pure Python; False = estensione C se disponibile |
Cosa fare dopo
Con una connessione funzionante sei pronto a costruire su di essa:
- Crea una tabella — definisci colonne e tipi di dato con
CREATE TABLE. - Inserisci righe — aggiungi dati con
INSERT INTOe query parametrizzate. - Interroga i dati — recupera righe con
SELECT,fetchone()efetchall(). - Filtra le righe — limita i risultati con le clausole
WHERE. - Crea un database — procedura completa del comando
CREATE DATABASE.