Come integrare SQLite e file CSV con Python: Guida pratica

Questa guida spiega come integrare SQLite e i file CSV in Python, coprendo sia gli aspetti base che quelli avanzati. Verranno descritti i passaggi per la creazione di un database, l’inserimento e il recupero dei dati, nonché la lettura e la scrittura dei file CSV. La guida fornirà passaggi facili da seguire per i principianti e permetterà di acquisire competenze utili per una gestione più efficiente dei dati.

Indice

Nozioni di base su Python e SQLite

Per usare SQLite con Python, prima di tutto è necessario importare la libreria SQLite. Python include la libreria sqlite3 come parte della libreria standard, che consente di interagire facilmente con il database SQLite.

Importazione della libreria SQLite

Iniziamo importando la libreria sqlite3 nel nostro script Python. Questo ci permette di interagire con il database SQLite.

import sqlite3

Stabilire una connessione al database

Il passo successivo è connettersi al database SQLite. Se il file del database non esiste, verrà creato un nuovo file del database.

# Connettersi al database
conn = sqlite3.connect('example.db')

Creazione di un cursore

Per eseguire le operazioni sul database, è necessario creare un cursore. Il cursore viene utilizzato per eseguire le istruzioni SQL e per recuperare i risultati.

# Creare un cursore
cur = conn.cursor()

Creazione di una tabella

Per creare una tabella, eseguiremo un’istruzione SQL. Come esempio, creeremo una tabella “users” per memorizzare le informazioni sugli utenti.

# Istruzione SQL per creare la tabella
create_table_sql = '''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER
)
'''
# Eseguire l'istruzione SQL
cur.execute(create_table_sql)

Salvare le modifiche nel database

Le modifiche apportate al database devono essere salvate utilizzando il metodo commit().

# Salvare le modifiche
conn.commit()

Chiudere la connessione al database

Quando il lavoro è completato, è importante chiudere la connessione al database per liberare le risorse.

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo introdotto i passaggi fondamentali per lavorare con SQLite in Python. Nella sezione successiva, esploreremo la creazione di un database specifico.

Creazione di un database SQLite

In questa sezione, esploreremo come creare un nuovo database SQLite utilizzando Python. Impareremo a configurare e a eseguire operazioni di base su un database appena creato, utilizzando un esempio di codice.

Creazione di un nuovo database

Per creare un nuovo database SQLite, seguiremo una procedura simile a quella descritta nella sezione precedente, utilizzando sempre la libreria sqlite3.

import sqlite3

# Creare o connettersi al nuovo database 'new_example.db'
conn = sqlite3.connect('new_example.db')

Creazione di un cursore e definizione della tabella

Una volta connessi al database, possiamo creare una tabella all’interno del database. La definizione della tabella avviene tramite un’istruzione SQL.

# Creare un cursore
cur = conn.cursor()

# Definire la tabella
create_table_sql = '''
CREATE TABLE IF NOT EXISTS products (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    price REAL
)
'''
# Eseguire l'istruzione SQL per creare la tabella
cur.execute(create_table_sql)

Creazione di più tabelle

È possibile creare più tabelle in un singolo database. In questo esempio, oltre alla tabella “products”, creiamo anche una tabella “categories”.

# Definire la tabella 'categories'
create_categories_table_sql = '''
CREATE TABLE IF NOT EXISTS categories (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL
)
'''
# Eseguire l'istruzione SQL per creare la tabella 'categories'
cur.execute(create_categories_table_sql)

Verifica della creazione delle tabelle

Per verificare che le tabelle siano state create correttamente, possiamo recuperare l’elenco delle tabelle presenti nel database.

# Ottenere la lista delle tabelle
cur.execute("SELECT name FROM sqlite_master WHERE type='table';")

# Recuperare i risultati e visualizzarli
tables = cur.fetchall()
print("Tabelle nel database:", tables)

Salvataggio delle modifiche e chiusura della connessione

Dopo aver creato le tabelle, è importante salvare le modifiche e chiudere la connessione al database.

# Salvare le modifiche
conn.commit()

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo esplorato come creare un nuovo database SQLite e definire tabelle. Nella sezione successiva, vedremo come inserire dati nel database appena creato.

Inserimento di dati nel database

Questa sezione descrive come inserire dati in un database SQLite appena creato. Verranno mostrati i passaggi per inserire dati singoli o multipli usando Python.

Preparazione all’inserimento dei dati

Prima di inserire i dati, dobbiamo connetterci al database e creare un cursore.

import sqlite3

# Connettersi al database
conn = sqlite3.connect('new_example.db')
cur = conn.cursor()

Inserimento di una singola riga

Usiamo l’istruzione SQL INSERT per inserire una singola riga di dati nella tabella. Qui inseriamo un prodotto nella tabella “products”.

# Dati da inserire
product_data = (1, 'Laptop', 1200.99)

# Istruzione SQL per inserire i dati
insert_product_sql = 'INSERT INTO products (id, name, price) VALUES (?, ?, ?)'

# Eseguire l'istruzione SQL
cur.execute(insert_product_sql, product_data)

Inserimento di più righe in batch

Per inserire più righe in una sola operazione, utilizziamo il metodo executemany().

# Dati da inserire in batch
multiple_products_data = [
    (2, 'Smartphone', 799.99),
    (3, 'Tablet', 499.99),
    (4, 'Monitor', 199.99)
]

# Eseguire l'inserimento batch
cur.executemany(insert_product_sql, multiple_products_data)

Verifica dei dati inseriti

Per verificare che i dati siano stati inseriti correttamente, recuperiamo i dati dalla tabella e li visualizziamo.

# Recuperare i dati
cur.execute('SELECT * FROM products')

# Recuperare i risultati e visualizzarli
rows = cur.fetchall()
for row in rows:
    print(row)

Gestione degli errori

Per gestire eventuali errori durante l’inserimento, implementiamo il blocco try-except per gestire gli errori SQL.

try:
    # Inserire i dati
    cur.execute(insert_product_sql, (5, 'Keyboard', 49.99))
    conn.commit()
except sqlite3.Error as e:
    print("Si è verificato un errore:", e)
    conn.rollback()

Salvataggio delle modifiche e chiusura della connessione

Una volta completato l’inserimento, salviamo le modifiche e chiudiamo la connessione.

# Salvare le modifiche
conn.commit()

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo visto come inserire dati in un database SQLite. Nella sezione successiva, esploreremo come recuperare dati da un database SQLite.

Recupero dei dati dal database

In questa sezione, descriviamo come recuperare i dati da un database SQLite. Impareremo a usare Python per cercare e visualizzare i dati in modo efficiente.

Connessione al database e creazione del cursore

Come sempre, dobbiamo prima connetterci al database e creare un cursore.

import sqlite3

# Connettersi al database
conn = sqlite3.connect('new_example.db')
cur = conn.cursor()

Recupero di tutti i dati

Per recuperare tutti i dati, utilizziamo una query SELECT. In questo caso, recuperiamo tutti i dati dalla tabella “products”.

# Recuperare tutti i dati
cur.execute('SELECT * FROM products')

# Recuperare i risultati
rows = cur.fetchall()
for row in rows:
    print(row)

Recupero dei dati con condizioni

Utilizzando una clausola WHERE, possiamo recuperare i dati che soddisfano determinate condizioni. Ad esempio, recuperiamo i prodotti con un prezzo maggiore o uguale a 500 dollari.

# Recuperare i dati con una condizione
cur.execute('SELECT * FROM products WHERE price >= 500')

# Recuperare i risultati e visualizzarli
rows = cur.fetchall()
for row in rows:
    print(row)

Recupero di colonne specifiche

Possiamo anche recuperare solo colonne specifiche, come ad esempio il nome del prodotto e il prezzo.

# Recuperare colonne specifiche
cur.execute('SELECT name, price FROM products')

# Recuperare i risultati e visualizzarli
rows = cur.fetchall()
for row in rows:
    print(row)

Ordinamento dei dati

Possiamo ordinare i dati utilizzando la clausola ORDER BY. Ad esempio, possiamo ordinare i prodotti per prezzo in ordine crescente.

# Ordinare i dati per prezzo in ordine crescente
cur.execute('SELECT * FROM products ORDER BY price ASC')

# Recuperare i risultati e visualizzarli
rows = cur.fetchall()
for row in rows:
    print(row)

Limitare il numero di righe

Possiamo limitare il numero di righe recuperate utilizzando la clausola LIMIT. Ad esempio, recuperiamo solo le prime 2 righe.

# Limitare il numero di righe
cur.execute('SELECT * FROM products LIMIT 2')

# Recuperare i risultati e visualizzarli
rows = cur.fetchall()
for row in rows:
    print(row)

Chiusura della connessione

Una volta completato il recupero dei dati, chiudiamo la connessione al database per liberare le risorse.

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo spiegato come recuperare i dati da un database SQLite. Nella sezione successiva, esamineremo come leggere un file CSV con Python.

Lettura di file CSV

In questa sezione, spieghiamo come leggere un file CSV con Python. I file CSV sono un formato comune per la memorizzazione dei dati e possono essere facilmente gestiti tramite la libreria standard di Python.

Importazione del modulo csv

Per lavorare con i file CSV, dobbiamo importare il modulo csv, che fa parte della libreria standard di Python.

import csv

Lettura di un file CSV

Possiamo leggere un file CSV utilizzando il metodo csv.reader. Nell’esempio, leggeremo il file chiamato “sample.csv”.

# Leggere il file CSV
with open('sample.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)

    # Leggere l'intestazione
    header = next(csvreader)
    print('Header:', header)

    # Leggere i dati
    for row in csvreader:
        print(row)

Ottenere il contenuto del file CSV come lista

Possiamo ottenere il contenuto del file CSV come una lista utilizzando il metodo csv.reader.

# Leggere il file CSV
with open('sample.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)

    # Ottenere i dati come lista
    data = list(csvreader)
    for row in data:
        print(row)

Ottenere il contenuto del file CSV come dizionario

Utilizzando csv.DictReader, possiamo leggere il contenuto del file CSV come un dizionario, dove ogni riga è rappresentata come un dizionario.

# Leggere il file CSV come dizionario
with open('sample.csv', newline='') as csvfile:
    csvreader = csv.DictReader(csvfile)

    # Leggere i dati
    for row in csvreader:
        print(row)

Gestione degli errori durante la lettura di un file CSV

Per gestire eventuali errori durante la lettura dei file, implementiamo il blocco try-except.

try:
    with open('sample.csv', newline='') as csvfile:
        csvreader = csv.reader(csvfile)

        # Leggere l'intestazione
        header = next(csvreader)
        print('Header:', header)

        # Leggere i dati
        for row in csvreader:
            print(row)
except FileNotFoundError:
    print("Il file CSV non è stato trovato.")
except Exception as e:
    print("Si è verificato un errore:", e)

In questa sezione, abbiamo visto come leggere un file CSV con Python. Nella sezione successiva, esploreremo come inserire i dati di un file CSV in un database SQLite.

Inserimento dei dati di un file CSV in SQLite

Questa sezione esplora come inserire i dati letti da un file CSV in un database SQLite. Impareremo a gestire i dati CSV e a trasferirli in un database SQLite con Python.

Lettura del file CSV

Iniziamo leggendo il file CSV. Utilizzeremo la stessa metodologia descritta nella sezione precedente.

import csv
import sqlite3

# Leggere il file CSV
with open('sample.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)
    header = next(csvreader)  # Leggere l'intestazione
    data = list(csvreader)  # Ottenere i dati come lista

Connessione al database SQLite

Successivamente, ci connettiamo al database SQLite e creiamo un cursore.

# Connettersi al database SQLite
conn = sqlite3.connect('new_example.db')
cur = conn.cursor()

Preparazione della tabella

Assicuriamoci che la tabella per l’inserimento dei dati CSV esista. In questo esempio, utilizziamo la tabella “products”.

# Creare la tabella se non esiste
create_table_sql = '''
CREATE TABLE IF NOT EXISTS products (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    price REAL
)
'''
cur.execute(create_table_sql)

Inserimento dei dati

Ora inseriamo i dati CSV nel database SQLite utilizzando il metodo executemany() per l’inserimento in batch.

# Istruzione SQL per inserire i dati
insert_product_sql = 'INSERT INTO products (id, name, price) VALUES (?, ?, ?)'

# Inserimento dei dati in batch
cur.executemany(insert_product_sql, data)

Verifica dell’inserimento dei dati

Per verificare che i dati siano stati inseriti correttamente, recuperiamo i dati dal database e li visualizziamo.

# Recuperare i dati dal database
cur.execute('SELECT * FROM products')
rows = cur.fetchall()
for row in rows:
    print(row)

Gestione degli errori

Implementiamo la gestione degli errori per l’inserimento dei dati, in modo da poter gestire eventuali problemi durante l’operazione.

try:
    # Inserimento dei dati in batch
    cur.executemany(insert_product_sql, data)
    conn.commit()
except sqlite3.Error as e:
    print("Si è verificato un errore:", e)
    conn.rollback()

Salvataggio delle modifiche e chiusura della connessione

Una volta inseriti i dati, salviamo le modifiche e chiudiamo la connessione al database.

# Salvare le modifiche
conn.commit()

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo esplorato come inserire i dati di un file CSV in un database SQLite. Nella sezione successiva, esploreremo come esportare i dati da un database SQLite in un file CSV.

Esportazione dei dati dal database SQLite in un file CSV

In questa sezione, vedremo come esportare i dati da un database SQLite in un file CSV. Python ci permette di esportare facilmente i dati in formato CSV per l’analisi e la condivisione.

Connessione al database SQLite

Iniziamo con la connessione al database e la creazione del cursore.

import sqlite3

# Connettersi al database SQLite
conn = sqlite3.connect('new_example.db')
cur = conn.cursor()

Recupero dei dati

Recuperiamo i dati da esportare dal database. In questo esempio, recuperiamo tutti i dati dalla tabella “products”.

# Recuperare i dati dal database
cur.execute('SELECT * FROM products')

# Recuperare i risultati e salvarli in una lista
rows = cur.fetchall()

Creazione del file CSV e scrittura dei dati

Successivamente, scriviamo i dati recuperati in un file CSV. Utilizzeremo il metodo csv.writer per farlo.

import csv

# Creare il file CSV
with open('exported_data.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile)

    # Scrivere l'intestazione
    header = ['id', 'name', 'price']
    csvwriter.writerow(header)

    # Scrivere i dati
    csvwriter.writerows(rows)

Gestione degli errori durante l’esportazione

Per gestire eventuali errori durante l’esportazione, implementiamo la gestione degli errori.

try:
    # Creare il file CSV
    with open('exported_data.csv', 'w', newline='') as csvfile:
        csvwriter = csv.writer(csvfile)

        # Scrivere l'intestazione
        header = ['id', 'name', 'price']
        csvwriter.writerow(header)

        # Scrivere i dati
        csvwriter.writerows(rows)
except Exception as e:
    print("Si è verificato un errore durante l'esportazione dei dati:", e)

Verifica dell’esportazione

Per verificare che i dati siano stati esportati correttamente, possiamo leggere il file CSV appena creato e visualizzarne il contenuto.

# Leggere il file CSV per verificare l'esportazione
with open('exported_data.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        print(row)

Chiusura della connessione

Una volta completata l’esportazione dei dati, chiudiamo la connessione al database per liberare le risorse.

# Chiudere la connessione
conn.close()

In questa sezione, abbiamo esplorato come esportare i dati da un database SQLite in un file CSV. Nella sezione successiva, vedremo alcuni esempi avanzati di analisi dei dati e creazione di report utilizzando SQLite e CSV.

Esempi avanzati: Analisi dei dati e creazione di report

Questa sezione presenta alcuni esempi concreti di analisi dei dati e creazione di report utilizzando l’integrazione tra SQLite e CSV. Impareremo a eseguire analisi dei dati e ottenere informazioni utili.

Importazione dei dati e preparazione

Iniziamo importando i dati da un file CSV e preparandoli per l’analisi. Successivamente, eseguiremo operazioni di analisi sui dati.

import csv
import sqlite3

# Leggere il file CSV
with open('sample.csv', newline='') as csvfile:
    csvreader = csv.reader(csvfile)
    header = next(csvreader)
    data = list(csvreader)

# Connettersi al database SQLite per l'analisi
conn = sqlite3.connect('analysis_example.db')
cur = conn.cursor()

# Creare la tabella per i dati di vendita
cur.execute('''
CREATE TABLE IF NOT EXISTS sales (
    id INTEGER PRIMARY KEY,
    product_name TEXT NOT NULL,
    quantity INTEGER,
    price REAL,
    date TEXT
)
''')

# Inserire i dati nella tabella
insert_sql = 'INSERT INTO sales (id, product_name, quantity, price, date) VALUES (?, ?, ?, ?, ?)'
cur.executemany(insert_sql, data)

# Salvare le modifiche
conn.commit()

Analisi dei dati

Utilizzando le funzioni di aggregazione di SQLite, possiamo analizzare i dati. Ad esempio, possiamo calcolare le vendite totali per ogni prodotto.

# Calcolare le vendite totali per prodotto
cur.execute('''
SELECT product_name, SUM(quantity * price) as total_sales
FROM sales
GROUP BY product_name
ORDER BY total_sales DESC
''')

# Recuperare e visualizzare i risultati
results = cur.fetchall()
for row in results:
    print(f"Product: {row[0]}, Total Sales: {row[1]}")

Analisi dei dati temporali

Successivamente, analizziamo i dati temporali, come ad esempio calcolare le vendite mensili.

# Calcolare le vendite mensili
cur.execute('''
SELECT strftime('%Y-%m', date) as month, SUM(quantity * price) as monthly_sales
FROM sales
GROUP BY month
ORDER BY month
''')

# Recuperare e visualizzare i risultati
monthly_sales = cur.fetchall()
for row in monthly_sales:
    print(f"Month: {row[0]}, Monthly Sales: {row[1]}")

Visualizzazione dei dati

Utilizziamo matplotlib per visualizzare i dati. Ad esempio, possiamo creare un grafico delle vendite mensili.

import matplotlib.pyplot as plt

# Visualizzare le vendite mensili
months = [row[0] for row in monthly_sales]
sales = [row[1] for row in monthly_sales]

plt.plot(months, sales, marker='o')
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Creazione di report

Creiamo un report che riassuma i risultati dell’analisi, includendo sia il testo che i grafici.

# Creazione del report
report = """
Data Analysis Report

1. Total Sales by Product
------------------
"""
for row in results:
    report += f"Product: {row[0]}, Total Sales: {row[1]}\n"

report += "\n2. Monthly Sales\n------------------\n"
for row in monthly_sales:
    report += f"Month: {row[0]}, Monthly Sales: {row[1]}\n"

# Salvare il report in un file
with open('sales_report.txt', 'w') as report_file:
    report_file.write(report)

Riepilogo

In questa sezione, abbiamo esplorato esempi avanzati di analisi dei dati e creazione di report. Utilizzando SQLite e CSV, abbiamo imparato a raccogliere e analizzare i dati in modo efficiente, a visualizzarli e a creare report dettagliati.

Nella sezione successiva, presenteremo esercizi pratici per mettere in pratica quanto appreso.

Esercizi pratici

Questa sezione propone esercizi pratici per consolidare le conoscenze acquisite. Completa gli esercizi per migliorare le tue abilità nell’integrazione tra SQLite e CSV.

Esercizio 1: Importazione di nuovi dati CSV

Crea un nuovo file CSV (new_products.csv) contenente i dati dei prodotti e importalo nel database SQLite. Crea una nuova tabella per memorizzare i dati.

  1. Contenuto del file CSV: id,product_name,quantity,price,date 6,Headphones,150,99.99,2024-01-05 7,Smartwatch,200,199.99,2024-02-10 8,Speaker,100,149.99,2024-03-15
  2. Passaggi:
    • Connettersi al database SQLite
    • Creare una nuova tabella (es. new_products)
    • Leggere il file CSV e inserire i dati nella nuova tabella

Esercizio 2: Recupero dei dati con condizioni

Recupera i dati dalla tabella sales in base a una condizione specifica, come ad esempio i prodotti con un prezzo maggiore di 100 dollari.

  1. Condizione:
    • Recuperare i prodotti con un prezzo maggiore di 100 dollari
    • Visualizzare i risultati
  2. Passaggi:
    • Connettersi al database SQLite
    • Usare una query SQL SELECT per recuperare i dati che soddisfano la condizione
    • Visualizzare i risultati

Esercizio 3: Aggregazione dei dati e visualizzazione

Calcola le vendite mensili e visualizzale in un grafico a barre. Questo ti aiuterà a visualizzare i trend stagionali delle vendite.

  1. Passaggi:
    • Recuperare i dati delle vendite mensili dal database SQLite
    • Usare matplotlib per creare un grafico a barre
    • Visualizzare il grafico

Esercizio 4: Esportazione dei dati

Esporta i dati dalla tabella sales in un file CSV. Verifica che i dati siano correttamente esportati leggendo il file CSV risultante.

  1. Passaggi:
    • Connettersi al database SQLite
    • Recuperare i dati dalla tabella sales
    • Scrivere i dati in un file CSV
    • Verificare il contenuto del file CSV

Esercizio 5: Creazione di un report di analisi dei dati

Analizza i dati delle vendite di un periodo specifico (ad esempio, dal gennaio al marzo 2024) e crea un report che includa sia i risultati dell’analisi che un grafico.

  1. Passaggi:
    • Recuperare i dati del periodo specificato dal database SQLite
    • Aggregare e analizzare i dati
    • Creare un report con i risultati dell’analisi
    • Creare un grafico e includerlo nel report

Questi esercizi ti aiuteranno a mettere in pratica le tue competenze di integrazione tra SQLite e CSV, approfondendo l’analisi dei dati e la creazione di report.

Riepilogo

In questa guida abbiamo esplorato come integrare SQLite e i file CSV utilizzando Python. Abbiamo visto come eseguire operazioni di base come la creazione di un database, l’inserimento di dati, la lettura di file CSV, l’analisi dei dati e la generazione di report.

  • Creazione di un database SQLite e operazioni di base
  • Inserimento e recupero dei dati
  • Lettura di file CSV e inserimento dei dati nel database
  • Esportazione dei dati e analisi

Acquisendo queste competenze, sarai in grado di gestire i dati in modo più efficiente e di analizzare i dati per ottenere informazioni utili. Completa gli esercizi proposti per affinare ulteriormente le tue capacità.

Continua a migliorare le tue competenze nella gestione e nell’analisi dei dati e applicale in vari progetti. L’integrazione tra Python, SQLite e i file CSV è uno strumento potente per risolvere molte sfide legate ai dati.

Speriamo che questa guida ti aiuti a migliorare le tue competenze nella gestione dei dati e nell’analisi.

Indice