SQLite è il sistema di database più diffuso al mondo e offre la pos­si­bi­li­tà di creare un database basato su SQL che può essere integrato di­ret­ta­men­te in ap­pli­ca­zio­ni 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 ef­fi­ca­ce­men­te con il sistema di database in questo lin­guag­gio di pro­gram­ma­zio­ne, è con­si­glia­bi­le avere co­no­scen­ze pregresse di SQL e Python. In questo modo la con­fi­gu­ra­zio­ne e il suc­ces­si­vo utilizzo del database ri­sul­te­ran­no più facili.

Consiglio

Se volete rin­fre­sca­re le vostre co­no­scen­ze di Python, vale la pena di dare un’occhiata al nostro tutorial su Python.

Impostare il proprio database: una guida

La con­fi­gu­ra­zio­ne del proprio database SQLite3 in Python richiede solo pochi passaggi. Una volta com­ple­ta­ta la con­fi­gu­ra­zio­ne, potete co­mu­ni­ca­re con il database uti­liz­zan­do i normali comandi SQL.

Primo passaggio: importare SQLite3 in Python

Per avere accesso alle funzioni spe­ci­fi­che di SQLite3 in Python, è ne­ces­sa­rio importare il modulo cor­ri­spon­den­te:

import sqlite3
python

Secondo passaggio: creare il database

Nella fase suc­ces­si­va, create un database uti­liz­zan­do la funzione SQLite “connect()”. Questa re­sti­tui­sce un oggetto con­nec­tion che può essere uti­liz­za­to per co­mu­ni­ca­re con il database. Una chiamata di funzione di connect, che crea una con­nes­sio­ne con un database chiamato “test”, si presenta nel modo seguente:

connection = sqlite3.connect("test.db")
python

Il parametro trasmesso della funzione è un file di database. Se non avete ancora creato un file di database chiamato “test.db”, questo verrà re­cu­pe­ra­to au­to­ma­ti­ca­men­te dalla chiamata alla funzione connect.

Terzo passaggio: con­trol­la­re se il database è stato creato con successo

A questo punto ve­ri­fi­ca­te se il database SQLite3 è stato creato con successo. A tale scopo, potete ri­chia­ma­re la funzione “total_changes” sull’oggetto con­nec­tion appena creato, che vi mostra quante righe di tabella del database re­la­zio­na­le sono state mo­di­fi­ca­te dopo la con­nes­sio­ne al database:

print(connection.total_changes)
python

Nel nostro caso, la funzione dovrebbe re­sti­tui­re il valore “0”, poiché non abbiamo ancora uti­liz­za­to alcun comando SQL e quindi abbiamo un database vuoto. Nel caso in cui i dati siano già stati me­mo­riz­za­ti nel database, il valore di ritorno della funzione può ov­via­men­te essere diverso.

Quarto passaggio: creare la struttura di base del database

Per ag­giun­ge­re dati al vostro database SQLite3 in Python, dovete prima creare una tabella, come di consueto con i database re­la­zio­na­li, in cui me­mo­riz­za­re i vostri dati.

A tale scopo, dovete uti­liz­za­re SQLite3 in Python per creare un oggetto cursor con la funzione pre­de­fi­ni­ta “cursor”, che vi con­sen­ti­rà di inviare comandi SQL al database. Il codice ne­ces­sa­rio a questo scopo è il seguente:

cursor = connection.cursor()
python

È quindi possibile uti­liz­za­re 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 de­si­de­ra­te creare un database con il nome “example” e le colonne “id”, “name” e “age”, il codice Python cor­ri­spon­den­te è il seguente:

cursor.execute("CREATE TABLE IF NOT EXISTS example (id INTEGER, name TEXT, age INTEGER)")
python

Quinto passaggio: ag­giun­ge­re dati

Con la stessa sintassi ne­ces­sa­ria per creare una tabella, vi ag­giun­ge­te 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)")
python

Con il codice pre­ce­den­te, sono state aggiunte tre voci alla tabella del database chiamata “example”.

Per salvare le modifiche al database, uti­liz­za­te la funzione “commit”:

connection.commit()
python
Consiglio

De­si­de­ra­te ospitare il database SQLite3 sul vostro server? La scelta tra diversi tipi di server è ampia. Per ap­pli­ca­zio­ni e volumi di dati piccoli, ad esempio, è adatto un VPS basato su cloud. Per le ap­pli­ca­zio­ni aziendali, invece, è più adatto un server dedicato.

Leggere i dati

Ov­via­men­te, potete creare i vostri database con SQLite3 in Python, ma anche leggere e produrre dati da database esistenti. A tale scopo, dovete con­net­ter­vi al database de­si­de­ra­to e, come il­lu­stra­to nelle istru­zio­ni guidate, creare degli oggetti con­nec­tion e cursor cor­ri­spon­den­ti. Suc­ces­si­va­men­te, potete formulare la query SQL, inviarla al database con la funzione “execute” e vi­sua­liz­za­re tutte le righe ri­sul­tan­ti con la funzione “fetchall”:

cursor.execute("SELECT * FROM example")
rows = cursor.fetchall()
for row in rows:
    print(row)
python

La funzione “fetchall” vi re­sti­tui­sce un elenco di righe che cor­ri­spon­do­no alla query. Per vi­sua­liz­za­re tutte queste righe nella console, potete usare un ciclo for su Python insieme a una di­chia­ra­zio­ne print.

Modifica dei dati esistenti

Poiché SQLite3 supporta il set di comandi SQL, avete la pos­si­bi­li­tà di mo­di­fi­ca­re o eliminare i dati del database. A tale scopo, inviate al database i comandi SQL ap­pro­pria­ti. Anche in questo caso, dovete stabilire una con­nes­sio­ne al database e creare oggetti con­nec­tion e cursor.

Can­cel­la­re i dati

Per can­cel­la­re la riga con ID 1, uti­liz­za­te il codice seguente:

cursor.execute("DELETE FROM example WHERE id = 1")
python

Mo­di­fi­ca­re i dati

Per mo­di­fi­ca­re l’età nella riga con ID 2 uti­liz­za­te il comando seguente:

cursor.execute("UPDATE example SET age = 31 WHERE id = 2")
python

Uti­liz­za­re i se­gna­po­sto

Se de­si­de­ra­ste formulare query SQL dinamiche nel vostro programma Python, non dovreste mai usare stringhe in Python, poiché po­treb­be­ro venire sfruttate dagli hacker per attaccare il vostro programma con la tecnica della SQL injection. Al contrario, in Python si dovrebbe ricorrere al se­gna­po­sto SQL “?”, che si utilizza nella query SQL inviata con “execute” al posto di un valore specifico. Come secondo parametro potete tra­smet­te­re alla funzione “execute” una tupla in Python con cui so­sti­tui­re i punti in­ter­ro­ga­ti­vi.

Le seguenti query sono quindi equi­va­len­ti:

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

Tenete presente che i punti in­ter­ro­ga­ti­vi nella query SQL vengono so­sti­tui­ti nell’ordine in cui si spe­ci­fi­ca­no le variabili nella tupla.

Chiudere la con­nes­sio­ne al database

Dopo aver eseguito tutte le ope­ra­zio­ni, dovete chiudere la con­nes­sio­ne al database. Anche a questo scopo, il modulo SQLite3 in Python contiene una funzione cor­ri­spon­den­te che si può ri­chia­ma­re di­ret­ta­men­te sull’oggetto con­nec­tion:

connection.close()
python
Vai al menu prin­ci­pa­le