Vai al contenuto principale

MySQL in Python Tutorial: prime basi

In questo tutorial imparerai come installare MySQL, creare database e creare tabelle, e molto altro.
Aggiornato 29 set 2026  · 13 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

MySQL è un sistema di gestione di basi di dati relazionali (RDBMS) che adotta un modello client-server. In pratica, un computer (il “client”) che vuole accedere ai dati deve connettersi al server RDBMS per farlo. 

Python, invece, è un popolare linguaggio di programmazione di alto livello e di uso generale. Gli sviluppatori lo usano spesso per creare siti web e software, automatizzare attività e analizzare dati. Può anche essere utilizzato con vari database, tra cui MySQL. Python supporta istruzioni di interrogazione dei dati, linguaggio di definizione dei dati e manipolazione dei dati. In questo tutorial vedrai come lavorare con MySQL in Python. 

Per iniziare con MySQL in Python

Per usare MySQL in Python dal tuo workspace DataCamp, devi usare le integrazioni del workspace per connetterti a un database hosted esistente. In questo tutorial costruiremo il nostro database da zero, quindi non useremo il workspace di DataCamp. 

Ecco i due passaggi da effettuare per seguire il tutorial: 

  1. Installa il server MySQL per fornire i servizi necessari alla gestione del database. Puoi scaricarlo e installarlo dal sito di MySQL. 
  2. Installa il connettore MySQL, ovvero un driver Python che ti aiuta a integrare le tue applicazioni Python con i database MySQL; può essere installato semplicemente con pip (il gestore pacchetti di Python).

Una volta installato il server MySQL: 

  1. Clona questo repository GitHub sulla tua macchina locale – come clonare un repository su GitHub.
  2. Crea e attiva un ambiente virtuale – creazione di ambienti virtuali. 
  3. Installa i pacchetti richiesti usando pip install -r requirements dal terminale.  
  4. Crea un file .env nella directory principale.
    1. Memorizza la password per autenticare il tuo utente con il server MySQL in una variabile chiamata PASSWORD – Se non hai assegnato una password all’utente root, il server non richiede una password.  

Avvertenze

Ogni file nel repository è preceduto da un numero per indicarne l’ordine in questo tutorial.

Per esempio, 04_data_insertion.py indica che il modulo dovrebbe essere eseguito per quarto (dopo i moduli 01 - 03). Puoi anche eseguire l’intero codice avviando 00_execute_all.py.

Stabilire una connessione

MySQL segue un modello server-client; ogni volta che un client vuole accedere ai dati, deve connettersi all’RDBMS. 

Per stabilire una connessione con il server si usa il metodo connect() del modulo mysql.connector…

import os

from mysql import connector
from dotenv import load_dotenv


load_dotenv()
PASSWORD = os.getenv("PASSWORD")

try:
    with connector.connect(
        host = "localhost",
        user = "root",
        password = PASSWORD
    ) as database:
        print(database)
except connector.Error as e:
    print(e)

"""
<mysql.connector.connection_cext.CMySQLConnection object at 0x00000188FA653970>
"""

Consulta l’elenco completo degli argomenti del metodo connect() nella documentazione. 

Ci sono tre cose da notare in questo codice: 

  1. Gestione di eccezioni ed errori: è buona pratica gestire gli errori mentre si stabilisce una connessione al server MySQL. 
  2. Chiudere la connessione: abbiamo usato un context manager, quindi non abbiamo chiuso esplicitamente la connessione usando il metodo close(). In generale, le connessioni vanno chiuse quando hai finito di accedere al database per evitare errori imprevisti. 
  3. Dati sensibili: usa variabili d’ambiente per nascondere le informazioni sensibili, perché condividerle rappresenta un rischio per la sicurezza. 

Ora che hai stabilito una connessione tra il tuo programma Python e il server MySQL, sei pronto a connetterti a uno dei tanti database disponibili sul server. Al momento non ne abbiamo; ciò significa che dovremo creare un nuovo database all’interno del server. Vediamo come farlo nella prossima sezione. 

Nota: ogni volta che si accede al database, deve essere stabilita una connessione con il server. Nei successivi esempi di codice, rimuoveremo questa parte per evitare ridondanze nel tutorial. Tuttavia, è inclusa nella codebase.

Creare un nuovo database in MySQL con Python

Da qui in poi avrai bisogno di competenze SQL; il corso Introduction to SQL di DataCamp è un buon punto di partenza per metterti in pari. 

Il modo tipico per creare un database in MySQL è il seguente: 

CREATE DATABASE book_ratings;

Per eseguire la stessa query in Python, devi creare un’istanza dell’oggetto cursor(). 

Dall’oggetto cursor() puoi passare i comandi SQL come stringa al metodo execute(), che eseguirà il codice. 

Creiamo un database chiamato “book_ratings…”

create_db = "CREATE DATABASE book_ratings"
with database.cursor() as cursor:
    cursor.execute(create_db)

Nota: eseguire questo codice più volte genererà un errore per informarti che il database esiste già.

Puoi verificare i database esistenti su un server come segue:

show_existing_db = "SHOW DATABASES"

with database.cursor() as cursor: 
    cursor.execute(show_existing_db)
    for db in cursor:
        print(db)

"""
('book_ratings',)
('information_schema',)
('mysql',)
('performance_schema',)
('sakila',)
('sys',)
('world',)
"""

Il codice sopra stampa i nomi di tutti i database attualmente presenti sul nostro server MySQL. Ce ne sono diversi perché il server MySQL genera automaticamente database per fornire accesso a varie metainformazioni e impostazioni del server.

Connettersi a un database esistente

Supponiamo che tu abbia già creato un database, ma non ti sia ancora connesso al server; come ti connetteresti direttamente al database? 

Semplice. 

Passa il nome del database come argomento al metodo connect():

try:
    with connector.connect(
        host = "localhost",
        user = "root",
        password = PASSWORD,
        database = "book_ratings"
    ) as database:
       
        print(database})

except connector.Error as e:
    print(e)

"""
<mysql.connector.connection_cext.CMySQLConnection object at 0x0000016DD8C24970>
"""

Creare tabelle

Le informazioni in un database sono archiviate in una tabella. Una tabella è semplicemente un formato usato per memorizzare una raccolta di dati correlati composta da colonne e righe. 

In un database possono esserci più tabelle, anche se non sono tra loro collegate. Puoi anche avere un database relazionale che contiene una sola tabella, come mostreremo in questa sezione – approfondisci i database relazionali con il corso Introduction to Relational Databases in SQL. 

La creazione di tabelle segue un approccio simile a quanto già visto; 

  • Scrivi un comando SQL come stringa 
  • Passalo al metodo execute() dell’oggetto cursor. 

L’istruzione SQL in questo caso è CREATE TABLE.

Usiamola per creare una tabella per i libri:

create_books_table = """
CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100),
    author VARCHAR(100),
    genre VARCHAR(100),
    release_year YEAR(4)
)
"""
# Create cursor object
with existing_database.cursor() as cursor:
    cursor.execute(create_books_table)
    existing_database.commit()

Nell’ultima riga del codice avrai notato che abbiamo usato il metodo commit() sul nostro oggetto existing_database. È stato necessario perché il comportamento predefinito del connettore MySQL per Python è di non effettuare automaticamente il commit di una transazione. 

Ogni volta che modifichi i dati di una tabella, devi chiamare il metodo commit() – scopri di più sul metodo commit() nella documentazione MySQL. 

Altre cose importanti da notare nel codice includono: 

  • NOT NULL: un vincolo che impone a una colonna di non accettare valori NULL. 
  • PRIMARY KEY: un valore univoco usato per identificare righe specifiche in una tabella. 
  • AUTO_INCREMENT: genera automaticamente un numero univoco per i nuovi record inseriti nella tabella. 

Possiamo verificare che lo schema sia stato creato correttamente usando l’istruzione DESCRIBE e poi stampando tutti gli elementi con il metodo fetchall() sul nostro oggetto cursor…

describe_books = "DESCRIBE books"
with existing_database.cursor() as cursor:
    cursor.execute(describe_books)
    books_schema = cursor.fetchall()
    for column in books_schema:
        print(column)

"""
('id', b'int', 'NO', 'PRI', None, 'auto_increment')
('title', b'varchar(100)', 'YES', '', None, '')
('author', b'varchar(100)', 'YES', '', None, '')
('genre', b'varchar(100)', 'YES', '', None, '')
('release_year', b'year', 'YES', '', None, '')
"""

Inserimento dei dati

Nelle sezioni precedenti abbiamo creato una tabella chiamata books nel nostro database book_ratings. Al momento, questa tabella è vuota. La prossima sezione coprirà due approcci a tua disposizione per popolare una tabella. 

Inserire un singolo record

Potrebbe capitare di dover inserire un singolo record in una tabella. Anche se nella pratica è raro, è comunque possibile farlo così:

# INSERT SINGLE RECORD
insert_single_record = "INSERT INTO books (id, title, author, genre, release_year)\
    VALUES (%s, %s, %s, %s, %s)"
single_record = (
    "1", "Choose Yourself! Be Happy, Make Millions, Live the Dream", "James Altucher", "self-help", "2013"
    )

# Create cursor object
with existing_database.cursor() as cursor:
    cursor.execute(insert_single_record, single_record)
    existing_database.commit()

Inserire più record

Il modo più comune per inserire dati in una tabella è con il metodo executemany(operation_to_perform, seq_of_params) dell’oggetto cursor; questo ti permette di inserire più record in una volta sola. 

La struttura dell’operazione che vogliamo eseguire resta la stessa; aggiorniamo solo la sequenza dei parametri. 

Ecco come appare nel codice: 

multiple_records = [
    (
        "2",
        "Skip the Line: The 10,000 Experiments Rule and Other Surprising Advice for Reaching Your Goals",
        "James Altucher",
        "self-help",
        "2021"        
    ),
    (
        "3",
        "The Power of No: Because One Little Word Can Bring Health, Abundance, and Happiness",
        "James Altucher",
        "self-help",
        "2014"
    ),
    ]

with existing_database.cursor() as cursor:
    cursor.executemany(insert_multiple_records, multiple_records)
    existing_database.commit()

Selezionare i dati 

L’istruzione SELECT viene usata per recuperare righe selezionate da una o più tabelle in un database. Possiamo usare SELECT in due modi: 

  1. Selezionare colonne specifiche da una tabella.
select_specific_cols = "SELECT author, release_year FROM books"
with existing_database.cursor() as cursor:
    cursor.execute(select_specific_cols)
  1. Restituire tutte le colonne usando l’asterisco “*”
# Create cursor object
select_all_cols = "SELECT * FROM books"
with existing_database.cursor() as cursor:
    cursor.execute(select_all_cols)

Ordinare e filtrare i dati 

Ordinare e filtrare i dati ti permette di restituire i risultati che ti interessano fornendo criteri specifici che i record devono soddisfare. 

Ecco alcuni esempi: 

WHERE

L’istruzione WHERE ti consente di filtrare i dati in base a una condizione specificata. 

Per esempio, supponiamo di voler estrarre il nome dell’autore e il titolo del libro per qualsiasi libro pubblicato entro e non oltre il 2010: 

condition = "SELECT author, title FROM books WHERE release_year <= 2010"
with existing_database.cursor() as cursor:
    cursor.execute(condition)

ORDER BY

Possiamo anche usare l’istruzione ORDER BY per ordinare i risultati in ordine crescente (ASC) o decrescente (DESC). Nota che la modalità predefinita è sempre l’ordine crescente, a meno che non venga specificato diversamente. 

Ecco come ordineremmo i dati per anno di pubblicazione in ordine decrescente:

order_by_year = "SELECT * FROM books ORDER BY release_year DESC"
with existing_database.cursor() as cursor:
    cursor.execute(order_by_year)

LIMIT

L’istruzione LIMIT ti permette di specificare il numero di record da restituire nel result set.

# Create cursor object
define_limit = "SELECT * FROM books LIMIT 3"
with existing_database.cursor() as cursor:
    cursor.execute(define_limit)

Il codice sopra limita a tre il numero di record restituiti. 

Aggiornare ed eliminare i dati

Capiterà che i dati cambino, non siano più utili o siano errati. In questa sezione imparerai a gestire questi casi con aggiornamenti ed eliminazioni. 

UPDATE

La query UPDATE ti consente di modificare i valori esistenti all’interno di una tabella senza alterarne la struttura. 

Per esempio, potresti dover aggiornare un record se qualcuno cambia nome; ecco come apparirebbe nel codice:

update_query = """
UPDATE
    books
SET
    author = "Big J"
WHERE
    author = "James Altucher"
"""
with existing_database.cursor() as cursor:
    cursor.execute(update_query)
    existing_database.commit()

DELETE

La query DELETE ti permette di eliminare un record da una tabella:

drop_record = "DELETE FROM books WHERE release_year <= 2000"
with existing_database.cursor() as cursor:
    cursor.execute(drop_record)
    existing_database.commit()

In questo codice abbiamo eliminato tutti i record con anno di pubblicazione minore o uguale a 2000. 

DROP TABLE

L’istruzione DROP TABLE ti consente di rimuovere in modo permanente una tabella da un database. Aggiungere IF EXISTS permette di gestire scenari in cui non sei sicuro che la tabella da eliminare esista, ma è del tutto opzionale. 

Eliminiamo la tabella che abbiamo creato nel nostro database book_ratings: 

drop_table = "DROP TABLE IF EXISTS books"
with existing_database.cursor() as cursor:
    cursor.execute(drop_table)
    existing_database.commit()

Conclusione

In questo tutorial hai imparato come stabilire una connessione con un server MySQL in Python, creare un nuovo database, connetterti a un database esistente, creare una tabella ed eseguire varie operazioni di query su una tabella MySQL da Python.  

Approfondisci con queste risorse:

Argomenti
SQL
Data Science
Python

Corsi SQL

Corso

Python - Livello Intermedio

4 ore
1.4M
Migliora le tue competenze nella scienza dei dati creando visualizzazioni con Matplotlib e manipolando DataFrames con pandas.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro