- Utilizzo pacchetto
Fletdi Python (suggerita v0.28.3) - Utilizzo Pattern MVC
- Utilizzo dei Package
- Utilizzo di mysql-connector-python (suggerita v9.5.0)
- Utilizzo del Pattern DAO
❗ ATTENZIONE: Ricordare di effettuare il fork del repository principale, quindi clonare su PyCharm il repository personale (https://github.com/my-github-username/Lab07) e non quello principale.
In caso di dubbi consultare la guida caricata nel lab02: https://github.com/Programmazione-Avanzata-2025-26/Lab02/blob/main/Guida.pdf
- Avvio e creazione connessione
- Una volta attivato XAMPP (se non già fatto, vedere il setup e attivazione nel repository del lab6), aprire DBeaver.
- Cliccare sull’icona
Database → Nuova Connessione(icona a forma di plug, in alto a sinistra). - Nella finestra che si apre, selezionare
MySQLdall'elenco dei database supportati e cliccareAvanti.
- Configurazione della connessione
- Inserire i seguenti parametri:
- Cliccare su
Tenta di Stabilire una Connessioneper verificare che DBeaver riesca a collegarsi correttamente al server MySQL. Se la connessione è riuscita, comparirà il messaggioConncted. - Premere infine
Fine.
- Creazione del database
- Importazione del database
- Espandere il nodo del database
musei_torino. - Cliccare col tasto destro su di esso →
Strumenti→Execute Script
- Selezionare il file
musei_torino.sqlfornito nel progetto. - Cliccare su
Iniziaper eseguire tutte le istruzioni SQL contenute nel file. - Al termine, compariranno le tabelle (museo, artefatto) nel pannello di navigazione.
- Espandere il nodo del database
- Verifica del contenuto
- Espandere le tabelle per visualizzare la struttura.
- Per verificare i dati, cliccare con il tasto destro su una tabella (ad esempio
museo) →Vedi Dati. - I dati pre-caricati saranno visibili in forma tabellare.
- (Facoltativo): esportazione o query di prova
- È possibile scrivere manualmente una query SQL in una nuova scheda (tasto destro sul database, quindi
SQL Editor → New Script/SQL Script) per verificare che tutto funzioni:SELECT * FROM museo; - Se i dati vengono visualizzati, il database è pronto per essere utilizzato dalla tua applicazione Python tramite
mysql-connector-python.
- È possibile scrivere manualmente una query SQL in una nuova scheda (tasto destro sul database, quindi
Implementare un’applicazione per la gestione di un sistema museale. L’applicazione deve consentire di:
- Visualizzare gli artefatti presenti in tutti i musei
- Visualizzare gli artefatti presenti in uno specifico museo
- Visualizzare gli artefatti di una specifica epoca
- Visualizzare gli artefatti in uno specifico museo di una specifica epoca
Fare uso del pattern MVC, utilizzando i pacchetti flet e mysql-connector-python. Interagire con il database tramite
l’uso pattern DAO, come spiegato a lezione.
Realizzare un’interfaccia grafica con flet simile a quella mostrata in figura.

La proposta di interfaccia include:
- Titolo pagina (“Lab07”) – già fatto ✅
- Pulsante per cambiare tema (default dark mode) utilizzando
Switch– già fatto ✅ - Sezione 1: Intestazione Gestione Museale - già fatto ✅
- Un controllo
Textcon testo "Musei di Torino".
- Un controllo
- Sezione 2: Filtraggio - TODO 📝
- Un controllo
Dropdownper selezionare un museo tra tutti quelli presenti nel database. - Un controllo
Dropdownper selezionare un’epoca tra tutte quelle a cui appartengono gli artefatti presenti nel database.
- Un controllo
- Sezione 3: Lista Artefatti Filtrata - TODO 📝
- Un controllo
ElevatedButton“Mostra Artefatti” per mostrare tutti gli artefatti che soddisfano i criteri di filtraggio specificati sopra. - Un contenitore
ListViewda popolare con gli artefatti che vengono letti dal database (in base al tipo di filtraggio indicato). Se nessun artefatto soddisfa i criteri di filtraggio indicati, il sistema risponderà con un alert.
- Un controllo
-
Per popolare il menu a tendina tramite DropDown, occorre aggiungere alla sua lista
optionsoggetti di tipoft.dropdown.Option. Ad esempio:self._view.elemento_dropdown.options.append(ft.dropdown.Option("Scelta 1"))` -
Per risolvere l’esercizio è necessario filtrare gli artefatti in base alle scelte effettuate dall’utente.
-
Ogni menu a tendina deve includere anche l’opzione “Nessun filtro”, che indica che il relativo filtro (ad esempio per nome del museo o per epoca) non è attivo. Ciò si può gestire in due modi:
- Direttamente con una query SQL che tiene conto dei filtri opzionali.
- In Python, filtrando i dati dopo averli letti dal database.
Nel primo caso (i), è possibile utilizzare la funzione
SQL COALESCE(), che restituisce il primo valore non nullo tra quelli passati come argomento. In questo modo, la query risulta valida sia quando l’utente seleziona un filtro, sia quando sceglie “Nessun filtro”.Ad esempio:
WHERE epoca = COALESCE(%s, epoca)`Se l’utente sceglie una opzione del dropdown, l’opzione viene usata per filtrare la lista di artefatti; se invece l’utente seleziona in uno specifico dropdown “nessun filtro”, il campo viene confrontato con se stesso e la condizione risulta sempre vera.
Nel secondo caso (ii) si possono leggere da SQL tutti gli artefatti, e poi applicare i filtri in Python.
-
Viene lasciata la libertà di utilizzare o meno l'ORM (Object Relational Mapping) spiegato a lezione, mediante, ad esempio, una identity map, oppure considerando che gli oggetti del DTO tengano traccia delle relazioni.
Il repository del lab07 è organizzato con la struttura ad albero mostrata di seguito e contiene tutto il necessario per svolgere il laboratorio:
Lab07/
├── database/
│ ├── __init__.py
| ├── artefatto_DAO.py (DA MODIFICARE)
| ├── connector.cnf
│ ├── DB_connect.py
│ └── museo_DAO.py (DA MODIFICARE)
│
├── model/
│ ├── __init__.py
│ ├── artefatto_DTO.py
│ ├── model.py (DA MODIFICARE)
│ └── museo_DTO.py
│
├── UI/
│ ├── __init__.py
│ ├── alert.py
│ ├── controller.py (DA MODIFICARE)
│ └── view.py (DA MODIFICARE)
│
├── musei_torino.sql (DA IMPORTARE)
├── main.py (DA ESEGUIRE)
└── requirements.txt

