Uso di SQLite3 con Python e Qt5

di il
2 risposte

Uso di SQLite3 con Python e Qt5

Sto sviluppando un'applicazione Python con Qt5 e SQLite3 (ma dovrebbe funzionare anche con altri DB, dovrebbe bastare selezionare il driver appropriato), per uso personale (motivo per cui uso SQLite).

Funziona tutto, ma intercettare gli errori su SQLite è un incubo (non solo SQLite, a onor del vero).

Ad esempio, se inserisco i dati da form in genere va tutto a buon fine (merito anche del controllo di validità sui campi). Se invece uso una struttura dati creata leggendo un csv esterno, alcuni record vengono rifiutati e mi ritorna un errore del tipo “The DataBase is locked”.

Evidentemente ci sono dei campi del csv che hanno qualcosa di malformato, o dei caratteri perversi: ho analizzato il csv sui record che non vanno e non ho trovato nulla di significativo (a parte un apice in una stringa, che probabilmente dovrei ‘escapare’).

La documentazione di SQLite/PyQt non aiuta: ho cercato se esistono funzioni che facciano l'escaping in automatico dei caratteri malvagi, ma non ne ho trovate. Dovrò farmela da me.

Adesso devo provare a tirare su un container con Postgres e vedere se cambia qualcosa, ma probabilmente andrò incontro ad altri problemi.

Qualcuno ha esperienza con SQLite/PyQt/Python?

2 Risposte

  • Re: Uso di SQLite3 con Python e Qt5

    Database is locked non ha NIENTE a che fare con l'encoding che in SQLite e' UTF8 e quindi gestisce 65536 caratteri diversi compresi accentate, cirillico ecc … (NON il Klingon, purtroppo ;-) )

    Il pasticcio e' da qualche altra parte.

    Ipotesi (ovviamente TUTTO da verificare):

    1)

    quando si accede ad un DBMS si apre una “transazione” che va SEMPRE chiusa con COMMIT o ROLLBACK

    la transazione e' associata alla connessione

    SQLite non permette di avere piu' “connessioni aperte” nello stesso momento

    QUINDI probabilmente, non stai gestendo correttamente le eccezioni generate dall'errato encoding e stai aprendo una “connessione” metre un'altra e' ancora in uso

    Nota: ‘connessione’ non implica necessariamente il TCP/IP

    2)

    hai aperto il file con un encoding sbagliato, quindi nella string Python c'e' una sequenza UTF8 NON VALIDA da cui l'errore

    3)

    immagino tu stia utilizzando SQLAlchemy: la libreria ha le sue logiche che bisogna capire bene ;-) 


    Non ha molto senso usare Postgresql, il motivo e' semplice

    sqlite non e' un gran dbms MA e' usato in milioni di applicazioni. E' ALTISSIMAMENTE improbabile che abbia qualche errore ‘banale’. Se ci sono devono capitare in situazioni molto al di là delle situazioni limite.

    Il tuo codice e' “bacato” ;-)

     E' necessario “debachizzarlo” ;-) 

  • Re: Uso di SQLite3 con Python e Qt5

    Sono riuscito a sistemare il tutto.

    Non si trattava di un errore di programmazione (a parte un if da riscrivere), ma probabilmente di un problema di accessi concorrenti, causato da un plugin di PyCharm che serve a visualizzare le tabelle.

    PS: non uso SQLAlchemy.

Devi accedere o registrarti per scrivere nel forum
2 risposte