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” ;-)