Forum >> Principianti >> scrivere / leggere dati su/da file e gestirli in classi

Pagina: 1

Salve a tutti, io sto lavorando ad un programma che prevede la lettura di circa 150 checkbutton suddivise in 18 gruppi da 8 selezioni.

La maschera e le selezioni sono state gestite con delle classi.

Il problema degli ignoranti arriva adesso, io devo salvare le selezioni delle 150 caselle in un file , per poi successivamente quando serve andare a recuperare le selezioni per poterle eventualmente modificare.

Non ho idea di come si possa fare.

Accetto MOLTI suggerimenti, se qualcuno a voglia di darmi una mano.

Grazie




Alberto

------
Alberto
Salve a tutti, io sto lavorando ad un programma che prevede la lettura di circa 150 checkbutton suddivise in 18 gruppi da 8 selezioni.

La maschera e le selezioni sono state gestite con delle classi.

Il problema degli ignoranti arriva adesso, io devo salvare le selezioni delle 150 caselle in un file , per poi successivamente quando serve andare a recuperare le selezioni per poterle eventualmente modificare.

Non ho idea di come si possa fare.

Accetto MOLTI suggerimenti, se qualcuno a voglia di darmi una mano.

Ciao caro, non so se ho capito bene, comunque ti consiglio di usare un database, SQLite per facilità.

Cya

Grazie Daniele, ci avevo già fatto un pensierino ma non so da dove partire, per gestire il salvataggio su db dei dati dalle classi.
La mia confidenza con le classi è uguale alla confidenza con i db .... veramente bassa.

Comunque proverò a buttare giù qualcosa e poi lo posterò per suggerimenti/ ottimizzazioni.

Intanto grazie




Ciao




Alberto
------
Alberto
Grazie Daniele, ci avevo già fatto un pensierino ma non so da dove partire, per gestire il salvataggio su db dei dati dalle classi.
La mia confidenza con le classi è uguale alla confidenza con i db .... veramente bassa.
Apprendere l'utilizzo di un database, anche relativamente semplice come SQLite, farà di te un programmatore migliore e più versatile. Non averne paura, anzi consideralo come un compagno di viaggio. Alla fine si tratta di salvare informazioni testuali e di capirne le logiche di utilizzo, non altro.

Buon divertimento.

Salve a tutti, come suggerito da Daniele ho provato a vedere cosa riesco a fare con le classi.

Il codice allegato crea il database , le 4 tabelle e crea un record x tabella.


Io ho pravato a impostare il "come" scrivere i dati della classe , ma mi da un errore di tipo.

Ci sto provando da 2 gg e mi sono rotto i corni a furia di dare testate al muto.




Non so piu' cosa provare.

Cerco aiuto ..... Grazie




Allego link al mio codice : https://pastebin.com/7WbahfXD + https://pastebin.com/d20FmHGc


Saluti

Grazie


Alberto



--- Ultima modifica di trescon in data 2018-08-08 15:16:25 ---
------
Alberto
Aiuto !! , in questa calda estate nessuno (essendo quindi costretto a stare al fresco di un clima) mi da un suggerimento ?




Grazie






------
Alberto
Ciao caro, ti ho aggiunto e modificato un po' di cosette, ma tieni presente che:
1. Ho cercato di non cambiare troppo il tuo codice, in modo da non disorientarti, ma non è detto che quanto lasciato sia la soluzione migliore. Ci sono molte ripetizioni ad esempio, che eviterei;
2. Non usare il codice in produzione, è fatto solo per farti partecipe dei vari passaggi, il tutto andrebbe aggiustato ed anzi passerei al punto 3;
3. Ti consiglio caldamente l'uso di un wrapper per l'interazione col DB, ce ne sono anche di leggerissimi.

Te lo copio/incollo qui sotto, ma se preferisci trovi tutto anche qui...

#Testato con Python 3.5.2
import sqlite3

# Prova_db_presepe
class PRESEPE_SALVA:
    def __init__(self, database = "presepe.db"):
        self.database = database
        self.connection = sqlite3.connect(database)
        self.cur = self.connection.cursor()

    def close(self):
        """chiudi la connessione a sqlite3"""
        self.connection.close()

    def __execute(self, data):
        """esegui i dati passati con data"""
        v = self.cur.execute(data)
        return v

    def __commit(self):
        """commit al database"""
        self.connection.commit()

    def presepe_salva(self, *args):
        # Crea tabella se non esistenti
        self.__execute('''CREATE TABLE IF NOT EXISTS scheda_1 (evento TEXT, time TEXT, rele_8 TEXT, rele_7 TEXT, rele_6 TEXT,rele_5 TEXT,rele_4 TEXT,rele_3 TEXT,rele_2 TEXT,rele_1 TEXT)''')
        self.__execute('''CREATE TABLE IF NOT EXISTS scheda_2 (evento INTEGER, time INTEGER, rele_8 INTEGER, rele_7 INTEGER, rele_6 INTEGER,rele_5 INTEGER,rele_4 INTEGER,rele_3 INTEGER,rele_2 INTEGER,rele_1 INTEGER)''')
        self.__execute('''CREATE TABLE IF NOT EXISTS scheda_3(evento INTEGER, time INTEGER, rele_8 INTEGER, rele_7 INTEGER, rele_6 INTEGER,rele_5 INTEGER,rele_4 INTEGER,rele_3 INTEGER,rele_2 INTEGER,rele_1 INTEGER)''')
        self.__execute('''Create TABLE IF NOT EXISTS scheda_4 (evento INTEGER, time INTEGER, rele_8 INTEGER, rele_7 INTEGER, rele_6 INTEGER,rele_5 INTEGER,rele_4 INTEGER,rele_3 INTEGER,rele_2 INTEGER,rele_1 INTEGER)''')
        # Inserisco i dati proveniente dall'istanza
        self.cur.executemany("INSERT INTO scheda_1 VALUES (?,?,?,?,?,?,?,?,?,?)", (args,))
        # Dati inseriti manualmente (consiglio di astrarli)
        self.__execute("INSERT INTO scheda_2 VALUES (1,50,60,61,60,61,61,60,61,61)")
        self.__execute("INSERT INTO scheda_3 VALUES (1,70,60,60,61,60,61,61,60,61)")
        self.__execute("INSERT INTO scheda_4 VALUES (1,90,61,61,60,61,60,60,61,60)")
        # Commit
        self.__commit()

    def test(self, scheda):
        """test per vedere se ci sono dati nella tabella passata"""
        try:
            for row in self.__execute("SELECT * FROM {} ORDER BY time".format(scheda)):
                print(row)
        except TypeError:
            print("Nessun dato presente nella tabella {}".format(scheda))
        except sqlite3.OperationalError:
            print("Tabella {} non esiste".format(scheda))

#Ok, ora proviamo il lavoro
pos = PRESEPE_SALVA()
pos.presepe_salva(1,20,61,61,61,60,60,61,60,60) #passo i tuoi dati qui
pos.test("scheda_1")
pos.test("scheda_2")
pos.test("scheda_3")
pos.test("scheda_4")
pos.test("scheda_5") #Solo per provare
pos.close()
Ciao e buone prove...



Pagina: 1



Esegui il login per scrivere una risposta.