56 votes

sqlite3.OperationalError : impossible d'ouvrir le fichier de base de données

J'obtiens cette erreur lors de la mise en place d'un serveur dans Django. Il s'agit de sqlite3, ce qui signifie qu'il devrait créer le fichier .db, mais il ne semble pas le faire. J'ai stipulé SQLite comme backend et un chemin de fichier absolu pour l'emplacement du fichier, mais sans succès.

S'agit-il d'un bogue ou est-ce que je fais quelque chose d'incorrect ? (Je me demandais simplement si le chemin d'accès absolu aux fichiers était spécifié différemment dans Ubuntu).

Voici le début de mon fichier settings.py :

# Django settings for OmniCloud project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
# ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
    'NAME': '~/Harold-Server/OmniCloud.db',                      # Or path to database file if using sqlite3.
    'USER': '',                      # Not used with sqlite3.
    'PASSWORD': '',                  # Not used with sqlite3.
    'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
    'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
}
}

85voto

John Points 3444

Django NewbieMistakes

PROBLÈME Vous utilisez SQLite3, votre DATABASE_NAME est défini à la valeur le chemin complet du fichier de base de données, le fichier de base de données est accessible en écriture par Apache, mais vous obtenez toujours l'erreur ci-dessus.

SOLUTION Assurez-vous qu'Apache peut également écrire sur le par la base de données. SQLite doit pouvoir écrire dans ce répertoire.

Assurez-vous que chaque dossier de votre par un numéro, par exemple /www/4myweb/db (observé sur Windows 2000).

Si DATABASE_NAME a pour valeur som '/Users/yourname/Sites/mydjangoproject/db/db', assurez-vous que vous avez créer le répertoire 'db' en premier.

Assurez-vous que votre répertoire /tmp est inscriptible dans le monde entier (ce qui est peu probable étant donné que d'autres choses sur votre système ne fonctionneront pas non plus). ls /tmp -ald devrait produire drwxrwxrwt. produire drwxrwxrwt ....

Assurez-vous que le chemin d'accès à la base de données spécifié dans settings.py est un chemin complet. complet.

Assurez-vous également que le fichier est présent à l'endroit prévu.

21voto

chhantyal Points 2122

J'ai rencontré exactement le même problème. Voici ma configuration qui a fonctionné.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'

Les autres paramètres dans le cas de sqlite3 seront identiques/par défaut.
Et vous devez créer data.sqlite3.

10voto

Daniel Roseman Points 199743

Vous n'avez pas spécifié le chemin absolu - vous avez utilisé un raccourci , ~ ce qui pourrait ne pas fonctionner dans ce contexte. Utiliser /home/yourusername/Harold-Server/OmniCloud.db au lieu de cela.

6voto

Vous devez utiliser le chemin complet au lieu de ~/ .

Dans votre cas, quelque chose comme /home/harold/Harold-Server/OmniCloud.db .

5voto

learningloop Points 101

Dans mon cas, le fichier sqlite db db.sqlite3 a été stockée dans la base de données DocumentRoot d'Apache. Ainsi, même après avoir défini les permissions suivantes, cela n'a pas fonctionné :

sudo chown www-data:www-data /path/to/db-folder
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db

Enfin, lorsque j'ai déménagé db.sqlite3 dans un dossier nouvellement créé dbfolder sous DocumentRoot et a donné les permissions ci-dessus, et cela a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X