SQLite - Python

In questo capitolo imparerai come usare SQLite nei programmi Python.

Installazione

SQLite3 può essere integrato con Python utilizzando il modulo sqlite3, che è stato scritto da Gerhard Haring. Fornisce un'interfaccia SQL conforme alla specifica DB-API 2.0 descritta da PEP 249. Non è necessario installare questo modulo separatamente perché viene fornito per impostazione predefinita insieme alla versione Python 2.5.x in poi.

Per utilizzare il modulo sqlite3, devi prima creare un oggetto di connessione che rappresenti il ​​database e poi opzionalmente puoi creare un oggetto cursore, che ti aiuterà nell'esecuzione di tutte le istruzioni SQL.

API del modulo Python sqlite3

Di seguito sono riportate importanti routine del modulo sqlite3, che possono essere sufficienti per il tuo requisito per lavorare con il database SQLite dal tuo programma Python. Se stai cercando un'applicazione più sofisticata, puoi esaminare la documentazione ufficiale del modulo sqlite3 di Python.

Sr.No. API e descrizione
1

sqlite3.connect(database [,timeout ,other optional arguments])

Questa API apre una connessione al file di database SQLite. È possibile utilizzare ": memory:" per aprire una connessione a un database che risiede nella RAM invece che su disco. Se il database viene aperto correttamente, restituisce un oggetto di connessione.

Quando si accede a un database da più connessioni e uno dei processi modifica il database, il database SQLite viene bloccato finché non viene eseguito il commit della transazione. Il parametro timeout specifica per quanto tempo la connessione deve attendere prima che il blocco venga rimosso fino a quando non viene sollevata un'eccezione. L'impostazione predefinita per il parametro timeout è 5.0 (cinque secondi).

Se il nome del database specificato non esiste, questa chiamata creerà il database. È possibile specificare anche il nome del file con il percorso richiesto se si desidera creare un database in qualsiasi altro luogo tranne nella directory corrente.

2

connection.cursor([cursorClass])

Questa routine crea un file cursorche verrà utilizzato durante la programmazione del database con Python. Questo metodo accetta un singolo parametro opzionale cursorClass. Se fornito, deve essere una classe cursore personalizzata che estende sqlite3.Cursor.

3

cursor.execute(sql [, optional parameters])

Questa routine esegue un'istruzione SQL. L'istruzione SQL può essere parametrizzata (cioè segnaposto invece di letterali SQL). Il modulo sqlite3 supporta due tipi di segnaposto: punti interrogativi e segnaposto con nome (stile con nome).

For example - cursor.execute ("inserisci nei valori delle persone (?,?)", (Who, age))

4

connection.execute(sql [, optional parameters])

Questa routine è una scorciatoia del metodo di esecuzione precedente fornito dall'oggetto cursore e crea un oggetto cursore intermedio chiamando il metodo cursore, quindi chiama il metodo di esecuzione del cursore con i parametri forniti.

5

cursor.executemany(sql, seq_of_parameters)

Questa routine esegue un comando SQL su tutte le sequenze di parametri o le mappature trovate nella sequenza sql.

6

connection.executemany(sql[, parameters])

Questa routine è una scorciatoia che crea un oggetto cursore intermedio chiamando il metodo del cursore, quindi chiama il metodo cursor.s executemany con i parametri forniti.

7

cursor.executescript(sql_script)

Questa routine esegue più istruzioni SQL contemporaneamente fornite sotto forma di script. Emette prima un'istruzione COMMIT, quindi esegue lo script SQL che ottiene come parametro. Tutte le istruzioni SQL devono essere separate da un punto e virgola (;).

8

connection.executescript(sql_script)

Questa routine è una scorciatoia che crea un oggetto cursore intermedio chiamando il metodo del cursore, quindi chiama il metodo executescript del cursore con i parametri forniti.

9

connection.total_changes()

Questa routine restituisce il numero totale di righe del database che sono state modificate, inserite o eliminate dall'apertura della connessione al database.

10

connection.commit()

Questo metodo esegue il commit della transazione corrente. Se non chiami questo metodo, tutto ciò che hai fatto dall'ultima chiamata a commit () non è visibile da altre connessioni al database.

11

connection.rollback()

Questo metodo ripristina tutte le modifiche al database dall'ultima chiamata a commit ().

12

connection.close()

Questo metodo chiude la connessione al database. Nota che questo non chiama automaticamente commit (). Se chiudi semplicemente la connessione al database senza chiamare prima commit (), le tue modifiche andranno perse!

13

cursor.fetchone()

Questo metodo recupera la riga successiva di un set di risultati di query, restituendo una singola sequenza o Nessuno quando non sono disponibili più dati.

14

cursor.fetchmany([size = cursor.arraysize])

Questa routine recupera la serie successiva di righe del risultato di una query, restituendo un elenco. Quando non sono disponibili più righe, viene restituito un elenco vuoto. Il metodo cerca di recuperare tutte le righe indicate dal parametro size.

15

cursor.fetchall()

Questa routine recupera tutte le righe (rimanenti) di un risultato di query, restituendo un elenco. Quando non sono disponibili righe, viene restituito un elenco vuoto.

Connetti al database

Il seguente codice Python mostra come connettersi a un database esistente. Se il database non esiste, verrà creato e infine verrà restituito un oggetto database.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')

print "Opened database successfully";

Qui puoi anche fornire il nome del database come nome speciale :memory:per creare un database nella RAM. Ora, eseguiamo il programma sopra per creare il nostro databasetest.dbnella directory corrente. Puoi cambiare il tuo percorso secondo le tue esigenze. Mantieni il codice sopra nel file sqlite.py ed eseguilo come mostrato di seguito. Se il database è stato creato correttamente, verrà visualizzato il seguente messaggio.

$chmod +x sqlite.py
$./sqlite.py
Open database successfully

Crea una tabella

Il seguente programma Python verrà utilizzato per creare una tabella nel database precedentemente creato.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute('''CREATE TABLE COMPANY
         (ID INT PRIMARY KEY     NOT NULL,
         NAME           TEXT    NOT NULL,
         AGE            INT     NOT NULL,
         ADDRESS        CHAR(50),
         SALARY         REAL);''')
print "Table created successfully";

conn.close()

Quando il programma sopra viene eseguito, creerà la tabella AZIENDA nel tuo file test.db e mostrerà i seguenti messaggi -

Opened database successfully
Table created successfully

Operazione INSERT

Il seguente programma Python mostra come creare record nella tabella COMPANY creata nell'esempio precedente.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print "Records created successfully";
conn.close()

Quando il programma di cui sopra viene eseguito, creerà i record dati nella tabella AZIENDA e visualizzerà le seguenti due righe:

Opened database successfully
Records created successfully

Operazione SELECT

Il seguente programma Python mostra come recuperare e visualizzare i record dalla tabella COMPANY creata nell'esempio precedente.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Quando il programma di cui sopra viene eseguito, produrrà il seguente risultato.

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully

Operazione UPDATE

Il seguente codice Python mostra come utilizzare l'istruzione UPDATE per aggiornare qualsiasi record e quindi recuperare e visualizzare i record aggiornati dalla tabella COMPANY.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit()
print "Total number of rows updated :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Quando il programma di cui sopra viene eseguito, produrrà il seguente risultato.

Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000.0

ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully

Operazione DELETE

Il seguente codice Python mostra come utilizzare l'istruzione DELETE per eliminare qualsiasi record e quindi recuperare e visualizzare i record rimanenti dalla tabella COMPANY.

#!/usr/bin/python

import sqlite3

conn = sqlite3.connect('test.db')
print "Opened database successfully";

conn.execute("DELETE from COMPANY where ID = 2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes

cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

Quando il programma di cui sopra viene eseguito, produrrà il seguente risultato.

Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0

ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0

ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0

Operation done successfully