Come risolvo l'errore 'OperationalError: unable to open database file' in SQLite con Flask?

👤 Iniziato da @caseypellegrini59
📅 22/10/2025 02:00
📁 Programmazione 🌐 IT
Avatar di caseypellegrini59
Ciao community! Sono Casey e nel tempo libero sto sviluppando un'app Flask per coordinare le attività del mio gruppo di volontariato locale. Purtroppo, quando avvio il server e provo ad accedere al database SQLite, ricevo sempre questo errore:

```python
OperationalError: unable to open database file
```
Lo snippet rilevante è:
```python
from flask import Flask
import sqlite3

app = Flask(__name__)
app.config['DATABASE'] = 'volontariato.db'

def get_db():
return sqlite3.connect(app.config['DATABASE']) # Errore qui
```
Ho già verificato che:
- Il file volontariato.db esista nella cartella del progetto
- I permessi di scrittura siano attivi (ho provato con chmod 777)
- Il percorso sia corretto (anche usando path assoluti)

Sto usando Python 3.9 e Flask 2.0.3 su Ubuntu. Qualcuno ha incontrato lo stesso problema? Suggerimenti su come sistemarlo? Grazie per il vostro aiuto, siete preziosi per progetti come il mio che aiutano la comunità! 😊
Avatar di petramoretti25
Oddio Casey, mi è capitato esattamente lo stesso incubo la settimana scorsa con un progetto simile! Il trucco è che SQLite ha bisogno non solo del file, ma anche che la *cartella* esista e sia scrivibile. Anche se hai chmod 777 sul file, se la directory non c’è o non ha i permessi giusti, esplode. Prova a modificare la configurazione così:

```python
import os
app.config['DATABASE'] = os.path.join(app.root_path, 'volontariato.db')
```

Poi assicurati che la cartella del progetto (dove sta il .py) abbia i permessi:
```bash
mkdir -p instance && chmod 755 instance
```
Flask di default cerca i file nell’*instance folder*, non nella root del progetto. Se non crei quella cartella manualmente, SQLite non sa dove sbattere la testa. Fidati, ho perso tre ore su questo dettaglio assurdo mentre salvavo i miei segnalibri di ricette vegan per il gruppo scout… 🙈 Spero ti aiuti!
Avatar di maraleone49
Ciao Casey! Quella maledetta eccezione con SQLite è un classico che mi ha fatto dannare pure a me... Petra ha centrato il punto sulla cartella `instance`: Flask per impostazione predefinita cerca lì il database, non nella root. Oltre alla sua soluzione (ottima), prova queste due cose:

1. **Lock del file**: Sicuro che non sia aperto da un altro processo? Tipo un client DB o un'istanza precedente del server bloccata. Su Ubuntu, `fuser volontariato.db` ti dice se c'è qualcosa che lo tiene in ostaggio.

2. **Path assoluti "al cubo"**: Anziché `app.root_path`, usa un join esplicito col percorso corrente:
```python
import os
app.config['DATABASE'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'volontariato.db')
```
Così elimini ogni dubbio sulla working directory.

Che bello il tuo progetto per il volontariato comunque! Se dopo questi tentativi ancora non parte, scrivimi pure: ti aiuto a debugare passo passo. Un abbraccio e forza col lavoro sociale! 💪💕
Avatar di gordianobianchi
Ciao Casey, ho letto le tue verifiche e le risposte degli altri utenti! Sembra che @petramoretti25 e @maraleone49 abbiano già fornito ottimi suggerimenti. La storia della cartella `instance` di Flask è un classico tranello, e il consiglio di @petramoretti25 di usare `os.path.join(app.root_path, 'volontariato.db')` è oro. Anche il suggerimento di @maraleone49 di controllare eventuali lock del file con `fuser volontariato.db` è utilissimo.

Un'ulteriore verifica che puoi fare è assicurarti che l'utente che esegue il server Flask abbia i permessi per accedere al file e alla cartella. Se lavori su Ubuntu, controlla anche se SELinux o AppArmor stiano bloccando l'accesso al file. Io personalmente ho risolto un problema simile assicurandomi che il path fosse assoluto e verificando i permessi della directory. Spero che questi consigli ti siano stati utili, forza con il tuo progetto!

La Tua Risposta

💬

Vuoi partecipare alla discussione?

Accedi o registrati per scrivere la tua risposta e unirti alla conversazione!