In questo tutorial, lavoreremo con il database SQLite3 a livello di programmazione utilizzando Python.
SQLite in generale è un database senza server che è possibile utilizzare in quasi tutti i linguaggi di programmazione incluso Python. Senza server significa che non è necessario installare un server separato per lavorare con SQLite in modo da poter connettersi direttamente con il database.
SQLite è un database leggero che può fornire un sistema di gestione del database relazionale con configurazione zero perché non è necessario configurare o configurare nulla per usarlo.,
Useremo SQLite versione 3 o SQLite3, quindi iniziamo.
Sommario
Crea Collegamento
Per utilizzare SQLite3 in Python, prima di tutto, è necessario importare il sqlite3 modulo e quindi creare un oggetto di connessione che ci collega al database e ci permetterà di eseguire le istruzioni SQL.
È possibile un oggetto di connessione utilizzando la funzione connect ():
import sqlite3con = sqlite3.connect('mydatabase.db')
Che creerà un nuovo file con il nome ‘mydatabase.DB’.,
Cursore SQLite3
Per eseguire istruzioni SQLite in Python, è necessario un oggetto cursore. Puoi crearlo usando il metodo cursor ().
Il cursore SQLite3 è un metodo dell’oggetto connection. Per eseguire le istruzioni SQLite3, è necessario stabilire una connessione in un primo momento e quindi creare un oggetto del cursore utilizzando l’oggetto di connessione come segue:
con = sqlite3.connect('mydatabase.db')cursorObj = con.cursor()
Ora possiamo usare l’oggetto cursore per chiamare il metodo execute() per eseguire qualsiasi query SQL.,
Crea database
Quando crei una connessione con SQLite, questo creerà automaticamente un file di database se non esiste già. Questo file di database viene creato su disco; possiamo anche creare un database nella RAM utilizzando: memory: con la funzione connect. Questo database è chiamato database in memoria.
Considera il codice seguente in cui abbiamo creato un database con una prova, eccetto e infine blocchi per gestire eventuali eccezioni:
In primo luogo, importiamo il modulo sqlite3, quindi definiamo una funzione sql_connection., All’interno di questa funzione, abbiamo un blocco try in cui la funzione connect() restituisce un oggetto di connessione dopo aver stabilito la connessione.
Quindi abbiamo tranne il blocco, che in caso di eccezioni stampa il messaggio di errore. Se non ci sono errori, la connessione verrà stabilita e verrà visualizzato un messaggio come segue.
Dopo di che, abbiamo chiuso la nostra connessione nel blocco finally. La chiusura di una connessione è facoltativa, ma è una buona pratica di programmazione, quindi si libera la memoria da qualsiasi risorsa inutilizzata.,
Crea tabella
Per creare una tabella in SQLite3, è possibile utilizzare la query Create Table nel metodo execute (). Si consideri la seguente procedura:
- Creare un oggetto di connessione.
- Dall’oggetto connessione, creare un oggetto cursore.
- Utilizzando l’oggetto cursore, chiamare il metodo execute con create table query come parametro.,
creiamo dipendenti con i seguenti attributi:
employees (id, name, salary, department, position, hireDate)
Il codice sarà come questo:
Nel codice di cui sopra, abbiamo definito due metodi, il primo stabilisce una connessione e il secondo metodo crea un oggetto cursore per eseguire l’istruzione create table.
Il metodo commit () salva tutte le modifiche apportate. Alla fine, vengono chiamati entrambi i metodi.
Per verificare se la nostra tabella è stata creata, è possibile utilizzare il browser DB per SQLite per visualizzare la tabella. Apri il tuo mydatabase.,file db con il programma, e dovresti vedere la tua tabella:
Inserisci nella tabella
Per inserire i dati in una tabella, usiamo l’istruzione INSERT INTO. Si consideri la seguente riga di codice:
cursorObj.execute("INSERT INTO employees VALUES(1, 'John', 700, 'HR', 'Manager', '2017-01-04')")con.commit()
Per verificare se i dati sono inseriti, fare clic su Sfoglia dati nel Browser DB:
Possiamo anche passare valori / argomenti a un’istruzione INSERT nel metodo execute (). È possibile utilizzare il punto interrogativo (?) come segnaposto per ogni valore., La sintassi dell’INSERTO sarà come la seguente:
cursorObj.execute('''INSERT INTO employees(id, name, salary, department, position, hireDate) VALUES(?, ?, ?, ?, ?, ?)''', entities)
in Cui le entità contengono i valori per i segnaposto come segue:
entities = (2, 'Andrew', 800, 'IT', 'Tech', '2018-02-06')
tutto Il codice è il seguente:
Aggiornamento della Tabella
Per aggiornare la tabella, è sufficiente creare una connessione, quindi creare un oggetto cursore utilizzando la connessione e, infine, utilizzare l’istruzione UPDATE nel metodo execute ().
Supponiamo di voler aggiornare il nome del dipendente il cui id è uguale a 2., Per l’aggiornamento, useremo l’istruzione UPDATE e per il dipendente il cui ID è uguale a 2. Useremo la clausola WHERE come condizione per selezionare questo dipendente.
Considera il seguente codice:
Questo cambierà il nome da Andrew a Rogers come segue:
Istruzione Select
Puoi usare l’istruzione select per selezionare i dati da una particolare tabella. Se si desidera selezionare tutte le colonne dei dati da una tabella, è possibile utilizzare l’asterisco (*)., La sintassi per questo sarà la seguente:
select * from table_name
In SQLite3, l’istruzione SELECT viene eseguita nel metodo execute dell’oggetto cursore., Ad esempio, selezionare tutte le colonne dei dipendenti tabella, eseguire il seguente codice:
cursorObj.execute('SELECT * FROM employees ')
Se si desidera selezionare le colonne da una tabella, quindi specificare le colonne come la seguente:
select column1, column2 from tables_name
Per esempio,
cursorObj.execute('SELECT id, name FROM employees')
L’istruzione select seleziona i dati richiesti dalla tabella del database, e se vuoi recuperare i dati selezionati, il fetchall() metodo dell’oggetto cursore viene utilizzato. Lo dimostreremo nella prossima sezione.,
Recupera tutti i dati
Per recuperare i dati da un database, eseguiremo l’istruzione SELECT e quindi useremo il metodo fetchall() dell’oggetto cursore per memorizzare i valori in una variabile. Dopodiché, eseguiremo il loop della variabile e stamperemo tutti i valori.
Il codice sarà come questo:
Il codice di cui sopra, provvederà a stampare il record nel nostro database come segue:
È anche possibile utilizzare il fetchall() in una riga come segue:
Se si desidera recuperare i dati specifici del database, è possibile utilizzare la clausola WHERE., Ad esempio, vogliamo recuperare gli ID e i nomi di quei dipendenti il cui stipendio è maggiore di 800. Per questo, popoliamo la nostra tabella con più righe, quindi eseguiamo la nostra query.
È possibile utilizzare l’istruzione insert per popolare i dati, oppure è possibile inserirli manualmente nel programma DB browser.
Ora, per recuperare id e nomi di coloro che hanno uno stipendio superiore a 800:
Nell’istruzione SELECT sopra, invece di usare l’asterisco (*), abbiamo specificato gli attributi id e name., Il risultato sarà il seguente:
sqlite3 rowcount
Il rowcount SQLite3 viene utilizzato per restituire il numero di righe interessate o selezionate dall’ultima query SQL eseguita.
Quando usiamo rowcount con l’istruzione SELECT, -1 verrà restituito in quanto il numero di righe selezionate è sconosciuto fino a quando non vengono tutte recuperate., Si consideri il seguente esempio:
print(cursorObj.execute('SELECT * FROM employees').rowcount)
Pertanto, per ottenere il numero di righe, è necessario recuperare tutti i dati, e quindi ottenere la lunghezza del risultato:
rows = cursorObj.fetchall()print len (rows)
Quando si utilizza l’istruzione DELETE, senza alcuna condizione (clausola where), che consente di eliminare tutte le righe della tabella, e restituire il numero totale di righe eliminate nel conteggio delle righe.
print(cursorObj.execute('DELETE FROM employees').rowcount)
Se nessuna riga viene eliminata, restituirà zero.,
Elenca le tabelle
Per elencare tutte le tabelle in un database SQLite3, è necessario interrogare la tabella sqlite_master e quindi utilizzare fetchall() per recuperare i risultati dall’istruzione SELECT.
sqlite_master è la tabella principale in SQLite3, che memorizza tutte le tabelle.
Questo elencherà tutte le tabelle come segue:
Controlla se una tabella esiste o meno
Quando si crea una tabella, dovremmo assicurarci che la tabella non sia già esistita. Allo stesso modo, quando si rimuove/ elimina una tabella, la tabella dovrebbe esistere.,s” con l’istruzione DROP TABLE come segue:
drop table if exists table_name
Per esempio,
cursorObj.execute('drop table if exists projects')
Si può anche verificare se la tabella che si desidera accedere esiste o non eseguendo la seguente query:
cursorObj.execute('SELECT name from sqlite_master WHERE type = "table" AND name = "employees"')print(cursorObj.fetchall())
Se i dipendenti tabella esiste, il suo nome come segue:
Se il nome della tabella che abbiamo specificato non esiste, una matrice vuota verrà restituito:
Drop table
È possibile eliminare/eliminare una tabella utilizzando l’istruzione DROP., La sintassi dell’istruzione DROP è la seguente:
drop table table_name
Per eliminare una tabella, la tabella deve esistere nel database. Pertanto, si consiglia di utilizzare “if exists” con l’istruzione drop come segue:
drop table if exists table_name
Ad esempio,
Eccezioni SQLite3
Le eccezioni sono gli errori di runtime. Nella programmazione Python, tutte le eccezioni sono le istanze della classe derivata da BaseException.,
In SQLite3, abbiamo le seguenti eccezioni Python principali:
DatabaseError
Qualsiasi errore relativo al database solleva il DatabaseError.
IntegrityError
IntegrityError è una sottoclasse di DatabaseError e viene generata quando si verifica un problema di integrità dei dati. Ad esempio, i dati esterni non vengono aggiornati in tutte le tabelle con conseguente incoerenza dei dati.
ProgrammingError
L’eccezione ProgrammingError viene sollevata quando ci sono errori di sintassi o la tabella non viene trovata o la funzione viene chiamata con un numero errato di parametri / argomenti.,
OperationalError
Questa eccezione viene sollevata quando le operazioni del database non sono riuscite, ad esempio, disconnessione insolita. Questa non è colpa dei programmatori.
NotSupportedError
Quando si utilizzano alcuni metodi che non sono definiti o supportati dal database, che genererà l’eccezione NotSupportedError.
sqlite3 Executemany (Bulk insert)
È possibile utilizzare l’istruzione executemany per inserire più righe contemporaneamente.
Considera il seguente codice:
Qui abbiamo creato una tabella con due colonne e “data” ha quattro valori per ogni colonna., Passiamo la variabile al metodo executemany () insieme alla query.
Si noti che abbiamo usato il segnaposto per passare i valori.
Il codice precedente genererà il seguente risultato:
Chiudi connessione
Una volta terminato il database, è buona norma chiudere la connessione. È possibile chiudere la connessione utilizzando il metodo close ().,
Per chiudere una connessione, utilizzare l’oggetto connection e chiamare il metodo close() come segue:
con = sqlite3.connect('mydatabase.db')#program statementscon.close()
sqlite3 datetime
Nel database Python SQLite3, possiamo facilmente memorizzare data o ora importando il modulo datatime. I seguenti formati sono i formati più comuni che puoi usare per datetime:
YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnow
Considera il seguente codice:
In questo codice, abbiamo importato prima il modulo datetime e abbiamo creato una tabella denominata assegnazioni con tre colonne.
Il tipo di dati della terza colonna è una data., Per inserire la data nella colonna, abbiamo usato datetime.data. Allo stesso modo, possiamo usare datetime.e ‘ ora di gestire il tempo.
Il codice precedente genererà il seguente output:
La grande flessibilità e mobilità del database SQLite3 lo rendono la prima scelta per qualsiasi sviluppatore di usarlo e spedirlo con qualsiasi prodotto con cui lavora.
È possibile utilizzare i database SQLite3 nei progetti Windows, Linux, Mac OS, Android e iOS grazie alla loro eccezionale portabilità. Quindi spedisci un file con il tuo progetto e il gioco è fatto.
Spero che il tutorial sia utile., Continua a tornare.
Grazie.
Ayesha Tariq è un ingegnere del software full stack, sviluppatore web e appassionato di sviluppatori blockchain. Ha una vasta conoscenza di C / C++, Java, Kotlin, Python e vari altri.