Python e database
indice: linguaggio_python
Quando i dati da gestire sono numerosi e collegati invece dei file si preferisce usare i database. L'inteprete Python viene fornito incluso con un modulo sqlite3 che permette di accedere ai dati salvati nel formato SQLite3
http://docs.python.org/library/sqlite3.html
In alternativa si possono installare altri moduli che permettono di usare anche gli altri tipi di database:
- con il modulo pyodbc si può accedere a tutti gli altri tipi di database (MySQL, PostGreSQL, MS Access, Oracle) http://en.wikibooks.org/wiki/Python_Programming/Database_Programming
- con il modulo MySQLdb ci si può collegare ai DBMS MySQL
- con il modulo psycopg2 ci si può collegare ai DBMS PostGreSQL
SQLite3
SQLite3 ha il pregio di non richiedere nessun software DBMS Server, ma di poter accedere direttamente ai dati memorizzati come un file locale con estensione .sq3
AGGIUNGERE un'immagine che rappresenta il precedente concetto
Uno dei limiti di SQLite3 è di non avere una gestione dei permessi di accesso e degli utenti e che, una volta creata una tabella, la sua struttura non può essere modificata. I tipi di dato supportati sono: TEXT, INTEGER, REAL, BLOB and NULL
SQLite3 apre implicitamente una transazione (begin) prima di ogni INSERT/UPDATE/DELETE che viene implicitamente chiusa (commit) subito dopo (a meno che vi sia SELECT). Per avere apertura e chiusura automatica (autocommit mode), si deve impostare il parametro di connessione isolation_level a None.
- db1.py
import sqlite3 connessione = sqlite3.connect('example.sq3') # ogni cursore consente di eseguire un'operazione indipendente sullo stesso db c = connessione.cursor() c.execute("CREATE TABLE clienti (cf text, nome text, cognome text);") # execute consente di eseguire un'istruzione SQL # lancia un'eccezione se si eseguono piu' istruzioni connessione.close()
- db2.py
import sqlite3 connessione = sqlite3.connect('example.sq3') c = connessione.cursor() t = ('Rossi',) # tecnica sostituzione di parametro c.execute('SELECT * FROM clienti WHERE cognome=?', t) riga = c.fetchone() print riga.keys() # nomi delle colonne print riga connessione.close()