SQLite3 con Python
SQLite è il sistema di database più diffuso al mondo e offre la possibilità di creare un database basato su SQL che può essere integrato direttamente in applicazioni di vario tipo. Anche Python supporta SQLite3 con un proprio modulo.
Come usare SQLite3 in Python
Potete integrare SQLite in Python sotto forma di modulo. Per lavorare efficacemente con il sistema di database in questo linguaggio di programmazione, è consigliabile avere conoscenze pregresse di SQL e Python. In questo modo la configurazione e il successivo utilizzo del database risulteranno più facili.
Se volete rinfrescare le vostre conoscenze di Python, vale la pena di dare un’occhiata al nostro tutorial su Python.
Impostare il proprio database: una guida
La configurazione del proprio database SQLite3 in Python richiede solo pochi passaggi. Una volta completata la configurazione, potete comunicare con il database utilizzando i normali comandi SQL.
Primo passaggio: importare SQLite3 in Python
Per avere accesso alle funzioni specifiche di SQLite3 in Python, è necessario importare il modulo corrispondente:
import sqlite3
pythonSecondo passaggio: creare il database
Nella fase successiva, create un database utilizzando la funzione SQLite “connect()”. Questa restituisce un oggetto connection che può essere utilizzato per comunicare con il database. Una chiamata di funzione di connect, che crea una connessione con un database chiamato “test”, si presenta nel modo seguente:
connection = sqlite3.connect("test.db")
pythonIl parametro trasmesso della funzione è un file di database. Se non avete ancora creato un file di database chiamato “test.db”, questo verrà recuperato automaticamente dalla chiamata alla funzione connect.
Terzo passaggio: controllare se il database è stato creato con successo
A questo punto verificate se il database SQLite3 è stato creato con successo. A tale scopo, potete richiamare la funzione “total_changes” sull’oggetto connection appena creato, che vi mostra quante righe di tabella del database relazionale sono state modificate dopo la connessione al database:
print(connection.total_changes)
pythonNel nostro caso, la funzione dovrebbe restituire il valore “0”, poiché non abbiamo ancora utilizzato alcun comando SQL e quindi abbiamo un database vuoto. Nel caso in cui i dati siano già stati memorizzati nel database, il valore di ritorno della funzione può ovviamente essere diverso.
Quarto passaggio: creare la struttura di base del database
Per aggiungere dati al vostro database SQLite3 in Python, dovete prima creare una tabella, come di consueto con i database relazionali, in cui memorizzare i vostri dati.
A tale scopo, dovete utilizzare SQLite3 in Python per creare un oggetto cursor con la funzione predefinita “cursor”, che vi consentirà di inviare comandi SQL al database. Il codice necessario a questo scopo è il seguente:
cursor = connection.cursor()
pythonÈ quindi possibile utilizzare la funzione “execute” del modulo SQLite3 per inviare comandi SQL al database. La funzione accetta i comandi, che seguono la solita sintassi SQL, come stringhe. Quindi, se desiderate creare un database con il nome “example” e le colonne “id”, “name” e “age”, il codice Python corrispondente è il seguente:
cursor.execute("CREATE TABLE IF NOT EXISTS example (id INTEGER, name TEXT, age INTEGER)")
pythonQuinto passaggio: aggiungere dati
Con la stessa sintassi necessaria per creare una tabella, vi aggiungete anche dei dati al suo interno:
cursor.execute("INSERT INTO example VALUES (1, alice, 20)")
cursor.execute("INSERT INTO example VALUES (2, 'bob', 30)")
cursor.execute("INSERT INTO example VALUES (3, 'eve', 40)")
pythonCon il codice precedente, sono state aggiunte tre voci alla tabella del database chiamata “example”.
Per salvare le modifiche al database, utilizzate la funzione “commit”:
connection.commit()
pythonDesiderate ospitare il database SQLite3 sul vostro server? La scelta tra diversi tipi di server è ampia. Per applicazioni e volumi di dati piccoli, ad esempio, è adatto un VPS basato su cloud. Per le applicazioni aziendali, invece, è più adatto un server dedicato.
Leggere i dati
Ovviamente, potete creare i vostri database con SQLite3 in Python, ma anche leggere e produrre dati da database esistenti. A tale scopo, dovete connettervi al database desiderato e, come illustrato nelle istruzioni guidate, creare degli oggetti connection e cursor corrispondenti. Successivamente, potete formulare la query SQL, inviarla al database con la funzione “execute” e visualizzare tutte le righe risultanti con la funzione “fetchall”:
cursor.execute("SELECT * FROM example")
rows = cursor.fetchall()
for row in rows:
print(row)
pythonLa funzione “fetchall” vi restituisce un elenco di righe che corrispondono alla query. Per visualizzare tutte queste righe nella console, potete usare un ciclo for su Python insieme a una dichiarazione print.
Modifica dei dati esistenti
Poiché SQLite3 supporta il set di comandi SQL, avete la possibilità di modificare o eliminare i dati del database. A tale scopo, inviate al database i comandi SQL appropriati. Anche in questo caso, dovete stabilire una connessione al database e creare oggetti connection e cursor.
Cancellare i dati
Per cancellare la riga con ID 1, utilizzate il codice seguente:
cursor.execute("DELETE FROM example WHERE id = 1")
pythonModificare i dati
Per modificare l’età nella riga con ID 2 utilizzate il comando seguente:
cursor.execute("UPDATE example SET age = 31 WHERE id = 2")
pythonUtilizzare i segnaposto
Se desideraste formulare query SQL dinamiche nel vostro programma Python, non dovreste mai usare stringhe in Python, poiché potrebbero venire sfruttate dagli hacker per attaccare il vostro programma con la tecnica della SQL injection. Al contrario, in Python si dovrebbe ricorrere al segnaposto SQL “?”, che si utilizza nella query SQL inviata con “execute” al posto di un valore specifico. Come secondo parametro potete trasmettere alla funzione “execute” una tupla in Python con cui sostituire i punti interrogativi.
Le seguenti query sono quindi equivalenti:
# Query SQL diretta
cursor.execute("UPDATE example SET age = 31 WHERE id = 2")
# Query SQL con segnaposti
age_var = 31
id_var = 2
cursor.execute("UPDATE example SET age = ? WHERE id = ?", (age_var, id_var))
pythonTenete presente che i punti interrogativi nella query SQL vengono sostituiti nell’ordine in cui si specificano le variabili nella tupla.
Chiudere la connessione al database
Dopo aver eseguito tutte le operazioni, dovete chiudere la connessione al database. Anche a questo scopo, il modulo SQLite3 in Python contiene una funzione corrispondente che si può richiamare direttamente sull’oggetto connection:
connection.close()
python