Vai al contenuto
Leo

Libreria

Database

Database SQLite: tabelle, ricerche e dati che restano.

  • 55 voci
  • 1 voci con esempi eseguiti

Funzioni 4

apri_database(percorso = ":memory:")#

Apre un database SQLite (lo crea se il file non c'è).

Senza percorso il database vive solo in memoria e sparisce alla fine del programma.

Esempiocontrollato con Leo
variabile db = apri_database("negozio.db")variabile db = apri_database("prova.db")   # valore di provadb.crea_tabella("alunni", {"nome": "testo"})variabile db = apri_database("prova.db")   # valore di provadb.inserisci("alunni", {"nome": "Ada"})variabile db = apri_database("prova.db")   # valore di provadb.cerca("alunni")variabile db = apri_database("prova.db")   # valore di provadb.chiudi()

crea_database(percorso = ":memory:")#

Sinonimo di apri_database.

Se il file esiste già lo apre senza cancellare niente.

Esempioeseguito con Leo
variabile db = crea_database("scuola.db")

database_di_esempio()#

Un database in memoria già pieno, per fare prove senza rompere niente.

Ha le tabelle classi (nome, aula), alunni (nome, cognome, classe_id, nato) e voti (alunno_id, materia, voto); sparisce alla fine del programma.

Esempiocontrollato con Leo
variabile db = database_di_esempio()variabile db = apri_database("prova.db")   # valore di provadb.stampa_tabella("alunni")

e_database(percorso)#

vero se il file esiste ed è un database SQLite.

Esempiocontrollato con Leo
se e_database("scuola.db") allora variabile db = apri_database("scuola.db") fine

Oggetto «database»

Un database SQLite aperto da un programma Leo.

ProprietàSignificato
aperto
in_transazione
percorso

.aggiorna(tabella, condizioni, valori, tutte = falso)#

Cambia i valori delle righe scelte.

Restituisce quante righe sono cambiate. Senza condizioni serve tutte = vero (protezione contro gli sbagli).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.aggiorna("studenti", {"nome": "Ada"}, {"età": 21})

.aggiungi_colonna(tabella, nome, tipo = "testo", predefinito = nulla)#

Aggiunge una colonna a una tabella che esiste già.

Le righe che ci sono già ricevono il valore predefinito (o nulla). Una colonna obbligatorio ha bisogno di un predefinito.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.aggiungi_colonna("alunni", "promosso", "sì/no", predefinito = falso)

.annulla()#

Annulla le modifiche fatte da inizia_transazione() in poi.

.cerca(tabella, condizioni = nulla, ordina = "", limite = 0)#

Le righe che rispettano le condizioni.

Il risultato è una lista di dizionari. Condizioni: {"nome": "Ada"} (uguale), {"età": [">", 18]}, {"nome": ["contiene", "an"]}, {"voto": ["tra", 18, 30]}, {"città": ["in", ["Roma", "Milano"]]}; più condizioni valgono tutte insieme. Le condizioni di uguaglianza si possono scrivere anche per nome: db.cerca("alunni", classe = "5A"). Ordinamento: "nome", "età discendente", "cognome, nome".

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.cerca("studenti", {"età": [">=", 18]}, ordina = "nome", limite = 10)

.cerca_testo(tabella, testo, colonne = nulla, ordina = "", limite = 0)#

Le righe che contengono le parole cercate.

Ogni parola deve comparire in almeno una colonna; maiuscole e accenti non contano ("citta" trova "Città"). Senza colonne cerca in tutte le colonne di testo.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.cerca_testo("libri", "principe piccolo", colonne = ["titolo", "autore"])

.chiudi()#

Chiude il database (le modifiche sono già salvate). Chiamarlo due volte non è un errore.

.colonne(tabella)#

Dizionario colonna -> tipo (per esempio {"id": "intero", "nome": "testo"}).

.compatta()#

Riordina il file del database e lo rende più piccolo dopo tante cancellazioni.

Restituisce quanti byte ha risparmiato (0 per un database in memoria).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provastampa(db.compatta())

.conferma()#

Salva le modifiche della transazione aperta con inizia_transazione().

.conta(tabella, condizioni = nulla)#

Quante righe rispettano le condizioni (tutte, senza condizioni).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.conta("studenti", {"età": ["<", 18]})variabile db = apri_database("prova.db")   # valore di provadb.conta("alunni", classe = "5A")

.conta_per(tabella, colonna, condizioni = nulla)#

Dizionario valore -> quante righe hanno quel valore.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provastampa(db.conta_per("alunni", "classe"))

.copia_di_sicurezza(percorso)#

Salva una copia completa del database in un altro file.

Funziona anche mentre il database è in uso; le modifiche di una transazione non ancora confermata non entrano nella copia. Restituisce il percorso.

Esempiocontrollato con Leo
variabile testo = "Leo parla italiano"   # valore di provavariabile db = apri_database("prova.db")   # valore di provadb.copia_di_sicurezza("copie/scuola_" + testo(oggi()) + ".db")

.copia_tabella(origine, nuova, condizioni = nulla)#

Crea nuova con le stesse colonne e ci copia le righe.

Restituisce quante righe ha copiato; con le condizioni copia solo quelle righe.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.copia_tabella("alunni", "alunni_5A", classe = "5A")

.crea_indice(tabella, colonne, unico = falso)#

Rende più veloci le ricerche su quelle colonne.

Con unico = vero impedisce anche i valori ripetuti. Restituisce il nome dell'indice. Serve con tabelle grandi (migliaia di righe).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.crea_indice("alunni", ["cognome", "nome"])

.crea_tabella(nome, colonne)#

Crea la tabella se non c'è già.

colonne è un dizionario nome -> tipo: intero, decimale, testo, logico, seguiti se vuoi da chiave, obbligatorio, unico. Se non c'è una colonna id Leo ne aggiunge una automatica.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.crea_tabella("studenti", {"nome": "testo obbligatorio", "età": "intero", "email": "testo unico"})

.distinti(tabella, colonna, condizioni = nulla)#

I valori diversi di una colonna, in ordine, senza ripetizioni.

I valori vuoti (nulla) non ci sono.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provastampa(db.distinti("alunni", "classe"))

.elimina(tabella, condizioni, tutte = falso)#

Cancella le righe scelte e dice quante erano.

Senza condizioni serve tutte = vero (oppure usa svuota).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.elimina("studenti", {"id": 3})

.elimina_duplicati(tabella, colonne = nulla)#

Toglie le righe ripetute (tiene la prima) e dice quante ha tolto.

Due righe sono ripetute se hanno uguali tutte le colonne (tranne l'id), oppure le colonne indicate.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.elimina_duplicati("iscritti", colonne = ["email"])

.elimina_tabella(nome)#

Cancella la tabella con tutte le sue righe.

Restituisce vero se la tabella c'era, falso se non esisteva.

.esegui(sql, parametri = nulla)#

Esegue un comando SQL e restituisce le righe (lista di dizionari).

I valori vanno SEMPRE nei parametri, mai incollati nel testo: ? con una lista oppure :nome con un dizionario.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.esegui("SELECT città, COUNT(*) AS quanti FROM studenti WHERE età > ? GROUP BY città", [18])variabile db = apri_database("prova.db")   # valore di provadb.esegui("UPDATE prodotti SET prezzo = prezzo * :k", {"k": 1.1})

.esiste(tabella, condizioni = nulla)#

vero se c'è almeno una riga che rispetta le condizioni.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provase db.esiste("alunni", nome = "Ada") allora stampa("trovata") fine

.esiste_tabella(nome)#

vero se nel database c'è la tabella nome.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provase non db.esiste_tabella("alunni") allora db.crea_tabella("alunni", {"nome": "testo"}) fine

.esporta_csv(tabella, percorso, separatore = ",", condizioni = nulla, ordina = "")#

Salva le righe in un file CSV.

La prima riga del file ha i nomi delle colonne. Restituisce quante righe ha scritto.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.esporta_csv("studenti", "studenti.csv", separatore = ";")

.esporta_json(tabella, percorso, condizioni = nulla, ordina = "")#

Salva le righe in un file JSON (lista di dizionari).

Restituisce quante righe ha scritto; le date diventano testi come "25/09/2026".

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.esporta_json("alunni", "alunni.json", ordina = "cognome")

.importa_csv(percorso, tabella, separatore = nulla)#

Aggiunge alla tabella le righe di un file CSV.

La prima riga del file deve avere i nomi delle colonne. Se la tabella non c'è la crea, indovinando i tipi (intero, decimale, logico o testo). Tutto o niente: con una riga sbagliata non inserisce nulla. Restituisce quante righe ha aggiunto.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.importa_csv("prodotti.csv", "prodotti")

.importa_json(percorso, tabella)#

Aggiunge alla tabella le righe di un file JSON (la crea se non c'è).

Il file deve contenere una lista di dizionari (come quelli scritti da esporta_json). Tutto o niente. Restituisce quante righe ha aggiunto.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.importa_json("alunni.json", "alunni")

.importa_righe(tabella, righe)#

Aggiunge alla tabella una lista di dizionari (la crea se non c'è).

Se la tabella non esiste Leo la crea indovinando i tipi (intero, decimale, logico, data, testo). Va anche una lista di liste con i nomi delle colonne nella prima. Tutto o niente. Restituisce quante righe ha aggiunto.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.importa_righe("pianeti", [{"nome": "Marte", "lune": 2}, {"nome": "Terra", "lune": 1}])

.inizia_transazione()#

Da qui le modifiche restano in sospeso fino a conferma() o annulla().

.inserisci(tabella, riga)#

Aggiunge una riga e restituisce il suo id.

riga è un dizionario colonna -> valore; con una lista di dizionari le inserisce tutte (tutte o nessuna, se una è sbagliata) e restituisce la lista degli id.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provavariabile id = db.inserisci("studenti", {"nome": "Ada", "età": 20})

.inserisci_o_aggiorna(tabella, riga, chiave = "id")#

Aggiorna la riga con la stessa chiave, oppure la aggiunge.

chiave è la colonna (o la lista di colonne) che riconosce la riga. Restituisce l'id della riga.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.inserisci_o_aggiorna("punteggi", {"giocatore": "Ada", "punti": 120}, chiave = "giocatore")

.massimo(tabella, colonna, condizioni = nulla)#

Il valore più grande della colonna (nulla se non ci sono righe).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.massimo("voti", "voto", materia = "matematica")

.media(tabella, colonna, condizioni = nulla)#

La media dei numeri di una colonna (nulla se non ci sono righe).

I valori vuoti non contano.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.media("voti", "voto", materia = "storia")

.minimo(tabella, colonna, condizioni = nulla)#

Il valore più piccolo della colonna (nulla se non ci sono righe).

Funziona con numeri, testi (ordine alfabetico) e date.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.minimo("alunni", "nato")

.pagina(tabella, numero, per_pagina = 10, condizioni = nulla, ordina = "")#

Le righe della pagina numero (da 1).

Serve per mostrare tante righe un po' alla volta.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.pagina("libri", 2, per_pagina = 20, ordina = "titolo")

.primo(tabella, condizioni = nulla, ordina = "")#

La prima riga trovata, o nulla se non ce n'è.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provavariabile s = db.primo("studenti", {"email": "ada@esempio.it"})variabile db = apri_database("prova.db")   # valore di provadb.primo("studenti", email = "ada@esempio.it")

.raggruppa(tabella, per, calcola = {"quanti": "conta"}, condizioni = nulla, ordina = "")#

Un riassunto per gruppi.

per è la colonna (o la lista di colonne) che forma i gruppi; calcola dice cosa calcolare per ogni gruppo: nome del risultato -> "conta", "somma COLONNA", "media COLONNA", "minimo COLONNA", "massimo COLONNA" o "distinti COLONNA". Il risultato è una lista di dizionari.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.raggruppa("voti", "materia", calcola = {"media": "media voto", "quanti": "conta"})

.riga(tabella, id)#

La riga con quell'id (la chiave della tabella), o nulla se non c'è.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provavariabile ada = db.riga("alunni", 1)stampa(ada["nome"])

.riga_a_caso(tabella, condizioni = nulla)#

Una riga scelta a caso (o nulla se non ce ne sono).

Ottima per i quiz.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provavariabile domanda = db.riga_a_caso("domande", livello = 1)

.rinomina_colonna(tabella, vecchio, nuovo)#

Cambia il nome di una colonna (i valori restano).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.rinomina_colonna("alunni", "eta", "età")

.rinomina_tabella(vecchio, nuovo)#

Cambia il nome di una tabella (le righe restano).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.rinomina_tabella("studenti", "alunni")

.somma(tabella, colonna, condizioni = nulla)#

La somma dei numeri di una colonna (0 se non ci sono righe).

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.somma("spese", "euro", mese = "marzo")

.stampa_tabella(tabella, condizioni = nulla, ordina = "", limite = 20)#

Stampa le righe come una tabella con i bordi.

Al posto del nome della tabella puoi dare una lista di righe (per

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.stampa_tabella("alunni", classe = "5A", ordina = "cognome")

.struttura(tabella)#

Com'è fatta la tabella, colonna per colonna (lista di dizionari).

Ogni dizionario ha nome, tipo, obbligatorio, unico, chiave, collegata (la tabella collegata o nulla) e predefinito.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provaper ogni c in db.struttura("alunni") fai stampa(c) fine

.svuota(tabella)#

Cancella tutte le righe della tabella (la tabella resta) e dice quante erano.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.svuota("carrello")

.tabelle()#

I nomi delle tabelle, in ordine alfabetico.

.transazione(azione)#

Esegue la funzione azione tutta o niente.

Se dentro azione c'è un errore, tutte le modifiche fatte fin lì vengono annullate e l'errore prosegue; altrimenti vengono salvate. Restituisce il risultato di azione.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.transazione(funzione () db.aggiorna("conti", {"id": 1}, {"saldo": 50}) fine)

.trova(tabella, condizioni = nulla, ordina = "", limite = 0)#

Sinonimo di cerca.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.trova("prodotti", {"prezzo": ["<", 10]})variabile db = apri_database("prova.db")   # valore di provadb.trova("alunni", classe = "5A")

.ultimo(tabella, condizioni = nulla, ordina = "")#

L'ultima riga (l'ultima inserita, o l'ultima nell'ordine dato).

Restituisce nulla se non ci sono righe.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.ultimo("messaggi")variabile db = apri_database("prova.db")   # valore di provadb.ultimo("voti", ordina = "voto")

.unisci(tabella, altra, collega = nulla, condizioni = nulla, ordina = "", limite = 0, anche_senza = falso)#

Unisce le righe collegate di due tabelle.

Ogni riga di tabella si unisce alla riga di altra a cui è collegata. Leo trova da solo il collegamento se una colonna è collegato ALTRA oppure si chiama come classe_id (per la tabella classi); altrimenti scrivi collega = {"colonna_di_tabella": "colonna_di_altra"}. Le colonne di altra con lo stesso nome di una di tabella diventano altra_colonna (per

Esempiocontrollato con Leo
anche_senza = verovariabile db = apri_database("prova.db")   # valore di provadb.unisci("alunni", "classi", ordina = "classi_nome, cognome")

.valore_sql(sql, parametri = nulla)#

Esegue un comando SQL e restituisce un solo valore (la prima colonna della prima riga).

Restituisce nulla se non ci sono righe. Come in esegui, i valori vanno nei parametri ?.

Esempiocontrollato con Leo
variabile voti = [7, 8, 6, 9]   # valore di provavariabile db = apri_database("prova.db")   # valore di provadb.valore_sql("SELECT MAX(voto) FROM voti WHERE materia = ?", ["storia"])

.valori(tabella, colonna, condizioni = nulla, ordina = "")#

La lista dei valori di una sola colonna.

Esempiocontrollato con Leo
variabile db = apri_database("prova.db")   # valore di provadb.valori("alunni", "nome", classe = "5A", ordina = "nome")