04. Inserimento di record
Utenti Windows e macOS
I programmi riportati in questa pagina sono stati concepiti per il S.O. Windows.
Gli utenti Mac OS X per poter eseguire con successo gli gli stessi programmi devono apportare la modifica riportata di seguito.
Sostituire l'istruzione
db_file = r"C:\SQLite\db\comuni\comuni.db"
con
from pathlib import Path
home = str(Path.home())
db_file = home+"/SQLite/db/comuni/comuni.db"
Aggiornamento del database
La procedura seguente illustra come eseguire le seguenti operazioni:
Creare una tabella nel database, se la tabella ancora non esiste
Eseguire una INSERT parametrizzata per aggiungere un record in una tabella
Aggiungere un record in una tabella associativa, inserendo le chiavi esterne preventivamente acquisite.
Esempio:
Codice sorgente
import sqlite3
from sqlite3 import Error
db_file = r"C:\sqlite\db\comuni\comuni.db"
try:
conn = sqlite3.connect("file:"+db_file+"?mode=rw", uri=True)
print("Connessione a", db_file, "avvenuta correttamente\n")
except Error as e:
print("Errore *****", e)
exit(1)
# Se non esistono nel DB crea le tabelle Attrazioni e Localizzare
sql_create1 = """
CREATE TABLE IF NOT EXISTS Attrazioni (
AttrazioneID INTEGER PRIMARY KEY,
Denominazione TEXT NOT NULL,
Descrizione TEXT);
"""
sql_create2 = """
CREATE TABLE IF NOT EXISTS Localizzare (
AttrazioneID INTEGER NOT NULL,
ComuneID INTEGER NOT NULL,
FOREIGN KEY(AttrazioneID)
REFERENCES Attrazioni(AttrazioneID),
FOREIGN KEY(ComuneID)
REFERENCES Comuni(ComuneID),
PRIMARY KEY (AttrazioneID, ComuneID));
"""
try:
c = conn.cursor()
c.execute(sql_create1)
c.execute(sql_create2)
print("Tabelle Attrazioni e Localizzare create correttamente\n")
except Error as e:
print("Errore *****", e)
conn.close()
exit(1)
# Abilita il controllo sulle Foreign Keys
print("PRAGMA foreign_keys = ON\n")
sql_pragma = """
PRAGMA foreign_keys = ON;
"""
try:
c.execute(sql_pragma)
except Error as e:
print("Errore *****", e)
conn.close()
exit(1)
# Acquisisce il nome di un'attrazione e la inserisce in tabella
attrazione = input("Inserisci il nome di un'attrazione: ")
descrizione = input("Inserisci la descrizione dell'attrazione: ")
sql_insert = """
INSERT INTO Attrazioni VALUES(null, ?, ?);
"""
try:
c.execute(sql_insert, (attrazione, descrizione))
AttrazioneID = c.lastrowid
except Error as e:
print("Errore *****", e)
conn.close()
exit(1)
# Chiede di inserire una lista di Comuni da associare all'attrazione
print("Inserisci una lista di comuni separati da virgole da associare all'attrazione: ")
elenco = input()
comuni = elenco.split(",")
for comune in comuni:
sql_query = """
SELECT ComuneID, Denominazione
FROM Comuni
WHERE Denominazione = ?;
"""
try:
c = conn.cursor()
comune = comune.strip()
c.execute(sql_query, (comune,))
righe = c.fetchall()
except Error as e:
print("Errore *****", e)
conn.close()
exit(1)
try:
for riga in righe:
sql_insert = """
INSERT INTO Localizzare VALUES(?, ?);
"""
ComuneID = riga[0]
ComuneDenominazione = riga[1]
c.execute(sql_insert, (AttrazioneID, ComuneID))
print(attrazione, "<->", ComuneDenominazione)
except Error as e:
print("Errore *****", e)
conn.close()
exit(1)
conn.commit()
conn.close()
Note:
Il comando di INSERT utilizzato per inserire una nuova attrazione in tabella, non specifica il valore della chiave ma utilizza NULL. Questo fa sì che la chiave venga generata automaticamente all'inserimento
sql_insert = """
INSERT INTO Attrazioni VALUES(null, ?, ?);
"""
Dopo aver inserito una nuova attrazione nella tabella Attrazioni, il valore della chiave deve essere rilevato perché necessario ad effettuare un inserimento nella tabella associativa Localizzare. Il valore della chiave è ottenuto tramite l'istruzione
AttrazioneID = c.lastrowid
Per creare l'associazione tra un'attrazione e l'elenco di comuni indicati dall'utente, occorre ottenere la chiave primaria di tali comuni. A tale scopo è effettuata la query
sql_query = """
SELECT ComuneID, Denominazione
FROM Comuni
WHERE Denominazione = ?;
"""
Quando l'utente inserisce l'elenco di comuni separati da virgole, il programma acquisisce il dato come unica stringa. Per una corretta elaborazione la stringa va trasformata in lista. Questa operazione è effettuata con le operazioni
elenco = input()
comuni = elenco.split(",")
Ogni elemento della lista comuni così ottenuta, può contenere degli spazi all'inizio o alla fine del nome (l'utente potrebbe aver scritto Pompei, Ercolano ,Portici). Per eliminare gli spazi ad inizio o alla fine della parola si utilizza l'istruzione
comune = comune.strip()
Sito: 7ecnologie
Sezione: 09. Python
Capitolo: 02. Introduzione a Python
Paragrafo: 04. Inserimento di record
Indice dei capitoli: 00. Risorse - 01. Ambiente di sviluppo - 02. Introduzione a Python - 03. Accesso al DB - 04. La libreria tkinter - 05. Tutorial - 98. Esercizi
Indice dei paragrafi: 01. Primi passi - 02. Query parametrizzate - 03. Query "voluminose" - 04. Inserimento di record