Pithone Albino

Pitone Albino

Oggi vediamo un po come utilizzare python con il noto db engine SQLite versione 3. Mi è venuto in mente di fare un post su questo solo perche oggi mi è servito per dei test che stavo facendo. Iniziamo col dire che SQLite è una libreria software che implementa un DBMS SQL incorporabile all’interno di applicazioni e utilizzata in molti grandi ed importanti progetti, Mozilla Firefox per fare un esempio, esistono molti binding per i più diffusi linguaggi di programmazione ed è portabile su molte piattaforme. Detto questo passiamo a python che ovviamente ha un binding per questo db nelle versioni piu nuove dovrebbe esserci gia il supporto per SQLite altrimenti basta installare sqlite3, ovviamente per questo vi basta googlare ma se avete problemi chiedete pure, quindi passiamo subito al vivo dell’attività e cioè per prima cosa creiamo un db con SQLite digitando nel terminale:


$ sqlite3 example_db
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

Ora creiamo una tabella al suo interno ed inseriamo dei dati di esempio


sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!',10);
sqlite> insert into tbl1 values('goodbye', 20);

Possiamo ora testare effettivamente il contenuto della nostra tabella


sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

Ora vediamo come possiamo interrogare questo db da python, per prima cosa importiamo il modulo e ci connettiamo:


import sqlite3.dbapi2 as sqlite3

#create connection to db
conn = sqlite3.connect(‘example_db’)

ora abbiamo bisogno di un cursore per poter eseguire le nostre query sul db per crearne uno:


#create cursor
c = conn.cursor()

per eseguire delle query ora dobbiamo semplicemente richiamare


# Create table
c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''')
# Insert a row of data
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")

e per scrivere i cambiamenti sul db basta eseguire


# Save (commit) the changes
conn.commit()

Se volessimo sapere invece quale è stato l’ultimo id inserito potremo usare


lastid = cursor.lastrowid

Se tentate di chiudere una connessione prima che le modifiche siano state salvate con il metodo commit SQLite solleverà un’eccezzione. Se non volete salvare le modifiche appena fatte vi viene messo a disposizione una funzione apposita per tornare indietro, rollback appunto, che ha il potere di cancellare tutte le vostre malefatte dal db


conn.rollback()

Fino ad ora abbiamo visto solo come inserire, ma per leggere? facciamo in questo modo


# Read all the rows from the given table
cursor.execute('SELECT * FROM stocks')
print cursor.fetchall()

Riceveremo una lista di tuple ed ognuna di esse rappresenta una riga, ma se avessimo voluto solo alcune delle righe avremmo potuto usare al posto di fetchall() un bel fetchmany() che prende come unico parametro un integer che definisce il numero di righe da tirare fuori se poi volessimo prendere solo il primo risultato allora potremmo usare un fetchone()


#fetch only 4 row from results
print cursor.fetchmany(4)
#fetch only the first row from results
print cursor.fetchone()

Ovviamente quando abbiamo finito bisogna chiudere il tutto chiamando le funzioni per chiudere il cursore e la connessione


# We can also close the cursor and connection if we are done with it
c.close()
conn.close()

SQLite è un database engine interessante a differenza degli altri non ha bisogno di un database server, infatti funziona come una libreria che utilizza un semplice file come database ed in alcuni casi le prestazioni sono veramente eccellenti. Il binding di Python sfrutta questi benefici e dà la possibilità agli sviluppatori di utlizzarlo facilmente nei propri progetti. Per il momento è tutto sperando di esservi stato d’aiuto.

– Fine –

Post scritto con KBlogo