Vai al contenuto principale

Come eseguire query SQL in Python e R – Tutorial

Scopri modi semplici ed efficaci per eseguire query SQL in Python e R per l’analisi dei dati e la gestione dei database.
Aggiornato 29 set 2026  · 13 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Cos’è SQL

Structured Query Language (SQL) è il linguaggio più comune usato per svolgere varie attività di analisi dei dati. Viene anche utilizzato per mantenere un database relazionale, ad esempio: aggiungere tabelle, rimuovere valori e ottimizzare il database. Un semplice database relazionale è composto da più tabelle interconnesse e ogni tabella è formata da righe e colonne.

In media, un’azienda tecnologica genera ogni giorno milioni di punti dati. Serve una soluzione di archiviazione robusta ed efficace per poter usare i dati per migliorare il sistema attuale o ideare un nuovo prodotto. Database relazionali come MySQL, PostgreSQL e SQLite risolvono questi problemi offrendo gestione del database solida, sicurezza e alte prestazioni.

Funzionalità principali di SQL

  • Creare nuove tabelle in un database
  • Eseguire query su un database
  • Recuperare dati da un database
  • Inserire record in un database
  • Aggiornare record in un database
  • Eliminare record da un database
  • Ottimizzare qualsiasi database

SQL è una competenza molto richiesta che ti aiuterà a trovare lavoro nel settore tech. Aziende come Meta, Google e Netflix cercano sempre professionisti dei dati in grado di estrarre informazioni da database SQL e proporre soluzioni innovative. Puoi imparare le basi di SQL seguendo il tutorial Introduction to SQL su DataCamp.

Perché usare SQL con Python e R?

SQL può aiutarci a scoprire l’andamento dell’azienda, comprendere i comportamenti dei clienti e monitorare le metriche di successo delle campagne di marketing. La maggior parte degli analisti di dati può svolgere gran parte dei compiti di business intelligence eseguendo query SQL, quindi perché abbiamo bisogno di strumenti come PoweBI, Python e R? Con le query SQL puoi dire cosa è successo in passato, ma non puoi prevedere le proiezioni future. Questi strumenti ci aiutano a capire meglio le prestazioni attuali e il potenziale di crescita.

Python e R sono linguaggi polivalenti che permettono ai professionisti di eseguire analisi statistiche avanzate, costruire modelli di machine learning, creare API di dati e, in definitiva, aiutare le aziende a pensare oltre gli indicatori chiave. In questo tutorial impareremo a connettere database SQL, popolare database ed eseguire query SQL usando Python e R.

Nota: Se sei alle prime armi con SQL, segui lo skill track SQL per capire le basi della scrittura di query SQL.

Tutorial Python

Il tutorial Python coprirà le basi della connessione a vari database (MySQL e SQLite), la creazione di tabelle, l’aggiunta di record, l’esecuzione di query e la funzione Pandas read_sql.

Configurazione

Possiamo connetterci al database usando SQLAlchemy, ma in questo tutorial useremo il pacchetto Python integrato SQLite3 per eseguire query sul database. SQLAlchemy offre supporto per tutti i tipi di database fornendo un’API unificata. Se ti interessa saperne di più su SQLAlchemy e su come funziona con altri database, dai un’occhiata al corso Introduction to Databases in Python.

MySQL è il motore di database più popolare al mondo ed è ampiamente utilizzato da aziende come YouTube, PayPal, LinkedIn e GitHub. Qui vedremo come connettere il database. Il resto dei passaggi per usare MySQL è simile al pacchetto SQLite3.

Per prima cosa, installa il pacchetto mysql usando "!pip install mysql" e poi crea un motore di database locale fornendo username, password e nome del database.

import mysql.connector as sql

conn = sql.connect(
  host="localhost",
  user="abid",
  password="12345",
  database="datacamp_python"
)

Allo stesso modo, possiamo creare o caricare un database SQLite usando la funzione sqlite3.connect. SQLite è una libreria che implementa un motore di database autonomo, senza configurazione e serverless. È DataLab-friendly, quindi lo useremo nel nostro progetto per evitare errori di localhost.

import sqlite3
import pandas as pd

conn= sqlite3.connect("datacamp_python.db")

Inizia a imparare Python e SQL gratis

Introduzione ai database in Python

BasicSkill Level
4 ore
102.1K learners
In questo corso imparerai le basi dei database relazionali e come usarli.
See DetailsRight Arrow
Start Course

Creare un database

In questa parte impareremo a caricare il dataset COVID-19's impact on airport traffic, con licenza CC BY-NC-SA 4.0, nel nostro database SQLite. Impareremo anche a creare tabelle da zero.

Immagine dal dataset Kaggle

Il dataset sul traffico aeroportuale riporta la percentuale del volume di traffico rispetto al periodo di riferimento dal 1° febbraio 2020 al 15 marzo 2020. Caricheremo un file CSV usando la funzione Pandas read_csv e poi useremo la funzione to_sql per trasferire il dataframe nella nostra tabella SQLite. La funzione to_sql richiede un nome tabella (stringa) e la connessione al motore SQLite.

data = pd.read_csv("data/covid_impact_on_airport_traffic.csv")


data.to_sql(
            'airport',             # Name of the sql table
            conn,                 # sqlite.Connection or sqlalchemy.engine.Engine
            if_exists='replace'
           )

Ora verificheremo se abbiamo avuto successo eseguendo una rapida query SQL. Prima di eseguire una query, dobbiamo creare un cursore che ci aiuterà a eseguire le query, come mostrato nel blocco di codice qui sotto. Puoi avere più cursori sullo stesso database all’interno di una singola connessione.

Nel nostro caso, la query SQL ha restituito tre colonne e cinque righe dalla tabella airport. Per visualizzare la prima riga, useremo cursor.fetchone().

cursor = conn.cursor()
cursor.execute("""SELECT Date, AirportName, PercentOfBaseline  
                  FROM airport
                  LIMIT 5""")
cursor.fetchone()


>>> ('2020-04-03', 'Kingsford Smith', 64)

Per visualizzare il resto dei record, useremo cursor.fetchall(). Il dataset aeroportuale è stato caricato correttamente nel database con poche righe di codice.

cursor.fetchall()

>>> [('2020-04-13', 'Kingsford Smith', 29),
     ('2020-07-10', 'Kingsford Smith', 54),
     ('2020-09-02', 'Kingsford Smith', 18),
     ('2020-10-31', 'Kingsford Smith', 22)]

Ora impariamo a creare una tabella da zero e popolarla aggiungendo valori di esempio. Creeremo una tabella studentinfo con id (integer, primary key, auto-increment), name (text) e subject (text).

Nota: La sintassi di SQLite è un po’ diversa. Ti consigliamo di consultare la cheat sheet di SQLite per capire le query SQL menzionate in questo tutorial.

cursor.execute("""
                CREATE TABLE studentinfo
                (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT,
                subject TEXT
                )
                 """)

Vediamo quante tabelle abbiamo aggiunto al database eseguendo una semplice query SQLite.

cursor.execute("""
                SELECT name
                FROM sqlite_master
                WHERE type='table'
                 """)
cursor.fetchall()

>>> [('airport',), ('studentinfo',)]

Esecuzione delle query

In questa sezione aggiungeremo valori alla tabella studentinfo ed eseguiremo semplici query SQL. Usando INSERT INTO, possiamo aggiungere una singola riga alla tabella studentinfo.

Per inserire valori, dobbiamo fornire gli argomenti query e value alla funzione execute. La funzione compila gli input “?” con i valori che abbiamo fornito.

query = """
            INSERT INTO studentinfo
            (name, subject)
            VALUES (?, ?)
        """
value = ("Marry", "Math")
cursor.execute(query,value)

Ripeti la query precedente aggiungendo più record.

query = """
           INSERT INTO studentinfo
           (name, subject)
           VALUES (?, ?)
        """
values = [("Abid", "Stat"),
          ("Carry", "Math"),
          ("Ali","Data Science"),
          ("Nisha","Data Science"),
          ("Matthew","Math"),
          ("Henry","Data Science")]

cursor.executemany(query,values)

È il momento di verificare i record. Per farlo eseguiremo una semplice query SQL che restituirà le righe in cui il subject è Data Science.

cursor.execute("""
                SELECT *
                FROM studentinfo
                WHERE subject LIKE 'Data Science'
                 """)
cursor.fetchall()

>>> [(4, 'Ali', 'Data Science'),
     (5, 'Nisha', 'Data Science'),
     (7, 'Henry', 'Data Science')]

Il comando DISTINCT subject viene usato per mostrare i valori unici presenti nelle colonne subject. Nel nostro caso, sono Math, Stat e Data Science.

cursor.execute("SELECT DISTINCT subject from studentinfo")
cursor.fetchall()

>>> [('Math',), ('Stat',), ('Data Science',)]

Per salvare tutte le modifiche useremo la funzione commit(). Senza il commit, i dati andranno persi dopo il riavvio della macchina.

conn.commit()

SQL con Pandas

In questa parte impareremo come estrarre i dati dal database SQLite e convertirli in un dataframe Pandas con una sola riga di codice. read_sql offre più del semplice eseguire query SQL. Possiamo usarlo per impostare colonne indice, analizzare data e ora, aggiungere valori e filtrare i nomi delle colonne. Scopri di più sull’importazione dei dati in Python seguendo un breve corso su DataCamp.

read_sql richiede due argomenti: una query SQL e la connessione al motore SQLite. L’output contiene le prime cinque righe della tabella airport in cui PercentOfBaseline è maggiore di 20.

data_sql_1 = pd.read_sql("""
                        SELECT Date,City,PercentOfBaseline
                        FROM airport
                        WHERE PercentOfBaseline > 20
                        ORDER BY Date DESC
                        """,
                        conn)
print(data_sql_1.head())

         Date          City  PercentOfBaseline
0  2020-12-02        Sydney                 27
1  2020-12-02      Santiago                 48
2  2020-12-02       Calgary                 99
3  2020-12-02  Leduc County                100
4  2020-12-02      Richmond                 86

Eseguire analisi dei dati su database relazionali è diventato più semplice con l’integrazione di Pandas. Possiamo anche usare questi dati per fare previsioni e svolgere analisi statistiche complesse.

La funzione plot viene utilizzata per visualizzare l’istogramma della colonna PercentOfBaseline.

data_sql_1.plot(y="PercentOfBaseline",kind="hist");

Allo stesso modo, possiamo limitare i valori ai primi 20 e visualizzare un grafico a linee di serie temporale.

data_sql_2 = pd.read_sql("""
                        SELECT Date,City,PercentOfBaseline
                        FROM airport
                        WHERE PercentOfBaseline > 20
                        ORDER BY Date DESC
                        LIMIT 20
                        """,
                        conn)


data_sql_2.plot(x="Date",y="PercentOfBaseline",kind="line");

Infine, chiuderemo la connessione per liberare risorse. La maggior parte dei pacchetti lo fa automaticamente, ma è preferibile chiudere le connessioni dopo aver finalizzato le modifiche.

conn.close()

Tutorial R

Replicheremo tutte le attività del tutorial Python usando R. Il tutorial include la creazione di connessioni, la scrittura di tabelle, l’aggiunta di righe, l’esecuzione di query e l’analisi dei dati con dplyr.

Configurazione

Il pacchetto DBI viene usato per connettersi ai database più popolari come MariaDB, Postgres, Duckdb e SQLite. Ad esempio, installa il pacchetto RMySQL e crea un database fornendo username, password, nome del database e indirizzo host.

install.packages("RMySQL")
library(RMySQL)
conn = dbConnect(
                MySQL(),
                user = 'abid',
                password = '1234',
                dbname = 'datacamp_R',
                host = 'localhost'
                )

In questo tutorial creeremo un database SQLite fornendo un nome e la funzione SQLite.

library(RSQLite)
library(DBI)
library(tidyverse)

conn = dbConnect(SQLite(), dbname = 'datacamp_R.db')

Creazione del database

Importando la libreria tidyverse, avremo accesso a dplyr, ggplot e ai dataset di default.

La funzione dbWriteTable accetta un data.frame e lo inserisce nella tabella SQL. Richiede tre argomenti: connessione a SQLite, nome della tabella e data frame. Con dbReadTable possiamo visualizzare l’intera tabella. Per vedere le prime 6 righe, abbiamo usato head.

dbWriteTable(conn, "cars", mtcars)
head(dbReadTable(conn, "cars"))

    mpg    cyl    disp    hp    drat    wt    qsec    vs    am    gear    carb
1    21.0    6    160    110    3.90    2.620    16.46    0    1    4    4
2    21.0    6    160    110    3.90    2.875    17.02    0    1    4    4
3    22.8    4    108    93    3.85    2.320    18.61    1    1    4    1
4    21.4    6    258    110    3.08    3.215    19.44    1    0    3    1
5    18.7    8    360    175    3.15    3.440    17.02    0    0    3    2
6    18.1    6    225    105    2.76    3.460    20.22    1    0    3    1

dbExecute ci permette di eseguire qualsiasi query SQLite, quindi lo useremo per creare una tabella chiamata idcard.

Per visualizzare i nomi delle tabelle nel database useremo dbListTables.

dbExecute(conn, 'CREATE TABLE idcard (id int, name text)')
dbListTables(conn)

>>> 'cars''idcard'

Aggiungiamo una singola riga alla tabella idcard e usiamo dbGetQuery per mostrare i risultati.

Nota: dbGetQuery esegue una query e restituisce i record, mentre dbExecute esegue una query SQL ma non restituisce alcun record.

dbExecute(conn, "INSERT INTO idcard (id,name)\
                 VALUES(1,'love')")
dbGetQuery(conn,"SELECT * FROM idcard")


id    name
1    love

Ora aggiungeremo altre due righe e mostreremo i risultati usando dbReadTable.

dbExecute(conn,"INSERT INTO idcard (id,name)\
                VALUES(2,'Kill'),(3,'Game')
               ")
dbReadTable(conn,'idcard')


id    name
1    love
2    Kill
3    Game

dbCreateTable ci consente di creare una tabella in modo semplice. Richiede tre argomenti: connessione, nome della tabella e un vettore di caratteri o un data.frame. Il vettore di caratteri è composto da nomi (nomi delle colonne) e valori (tipi). Nel nostro caso, forniremo un data.frame population predefinito per creare la struttura iniziale.

dbCreateTable(conn,'population',population)
dbReadTable(conn,'population')

country    year    population

Quindi useremo dbAppendTable per aggiungere valori nella tabella population.

dbAppendTable(conn,'population',head(population))
dbReadTable(conn,'population')

country    year    population
Afghanistan    1995    17586073
Afghanistan    1996    18415307
Afghanistan    1997    19021226
Afghanistan    1998    19496836
Afghanistan    1999    19987071
Afghanistan    2000    20595360

Esecuzione delle query

Useremo dbGetQuery per svolgere tutte le nostre attività di data analytics. Proviamo a eseguire una semplice query e poi a conoscere meglio le altre funzioni.

dbGetQuery(conn,"SELECT * FROM idcard")

id    name
1    love
2    Kill
3    Game

Puoi anche eseguire una query SQL complessa per filtrare la potenza del motore e mostrare un numero limitato di righe e colonne.

dbGetQuery(conn, "SELECT mpg,hp,gear\
                  FROM cars\
                  WHERE hp > 50\
                  LIMIT 5")


mpg    hp    gear
21.0    110    4
21.0    110    4
22.8    93    4
21.4    110    3
18.7    175    3

Per rimuovere tabelle, usa dbRemoveTable. Come possiamo vedere, abbiamo rimosso con successo la tabella idcard.

dbRemoveTable(conn,'idcard')
dbListTables(conn)
>>> 'cars''population'

Per capire meglio le tabelle useremo dbListFields, che mostrerà i nomi delle colonne in una determinata tabella.

dbListFields(conn, "cars")


>>> 'mpg''cyl''disp''hp''drat''wt''qsec''vs''am''gear''carb'

SQL con dplyr

In questa sezione useremo dplyr per leggere le tabelle ed eseguire poi query usando filter, select e collect. Se non vuoi imparare la sintassi SQL e preferisci svolgere tutto con puro R, questo metodo fa per te. Abbiamo caricato la tabella cars, l’abbiamo filtrata per gears e mpg e poi selezionato tre colonne come mostrato sotto.

cars_results <-
  tbl(conn, "cars") %>%
  filter(gear %in% c(4, 3),
         mpg >= 14,
         mpg <= 21) %>%
  select(mpg, hp, gear) %>%
  collect()
cars_results

mpg    hp    gear
21.0    110    4
21.0    110    4
18.7    175    3
18.1    105    3
14.3    245    3
...   ...   ...

Possiamo usare il dataframe filtrato per mostrare un boxplot con ggplot.

ggplot(cars_results,aes(fill=as.character(gear), y=mpg)) +
  geom_boxplot()

Oppure possiamo visualizzare un grafico a punti con facet diviso per numero di gears.

ggplot(cars_results,
  aes(mpg, ..count.. ) ) +
  geom_point(stat = "count", size = 4) +
  coord_flip()+
  facet_grid( as.character(gear) ~ . )

Conclusione

In questo tutorial abbiamo visto l’importanza di eseguire query SQL con Python e R, creare database, aggiungere tabelle ed effettuare analisi dei dati usando query SQL. Abbiamo anche imparato come Pandas e dplyr ci aiutino a eseguire query con una sola riga di codice.

SQL è una competenza imprescindibile per tutti i lavori legati alla tecnologia. Se stai iniziando la tua carriera come data analyst, ti consigliamo di completare in due mesi il career track Data Analyst with SQL Server. Questo percorso ti insegnerà tutto su query SQL, server e gestione delle risorse.

Puoi eseguire gratuitamente tutti gli script usati in questo tutorial:

Argomenti
Python
Data Science
SQL

Corsi correlati su Python e SQL

Corso

Introduzione ai database in Python

4 ore
102.1K
In questo corso imparerai le basi dei database relazionali e come usarli.
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