W3docs

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-python

Verifica l'installazione:

import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0

Se 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.py

Creazione 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 erroreSignificato
1045Accesso negato — nome utente o password errati
2003Impossibile connettersi all'host — server non in esecuzione o host/porta errati
1049Database sconosciuto — il nome database non esiste

Riferimento rapido: parametri di connessione

ParametroTipoDescrizione
hoststrHostname o IP del server MySQL (predefinito "127.0.0.1")
portintPorta MySQL (predefinita 3306)
userstrNome utente MySQL
passwordstrPassword MySQL
databasestrDatabase da selezionare alla connessione
charsetstrSet di caratteri (predefinito "utf8mb4")
connect_timeoutintSecondi di attesa per la connessione (predefinito 10)
use_pureboolTrue = pure Python; False = estensione C se disponibile

Cosa fare dopo

Con una connessione funzionante sei pronto a costruire su di essa:

Was this page helpful?