web-dev-qa-db-fra.com

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

J'obtiens cette erreur lors de la configuration d'un serveur dans Django. Il s'agit de sqlite3, ce qui signifie qu'il doit créer le fichier .db, mais il ne semble pas le faire. J'ai spécifié SQLite comme backend et un chemin de fichier absolu pour savoir où le mettre, mais pas de chance.

Est-ce un bug ou est-ce que je fais quelque chose de mal? (J'étais en train de penser, le chemin de fichier absolu est-il 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', '[email protected]'),
)

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.
}
}
41
Chris

Django NewbieMistakes

PROBLÈME Vous utilisez SQLite3, votre DATABASE_NAME est défini sur 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 dans le répertoire parent de la base de données. SQLite doit pouvoir écrire dans ce répertoire.

Assurez-vous que chaque dossier du chemin complet de votre fichier de base de données ne commence pas par un numéro, par exemple./www/4myweb/db (observé sur Windows 2000).

Si DATABASE_NAME est défini sur quelque chose comme '/ Users/yourname/Sites/mydjangoproject/db/db', assurez-vous que vous avez d'abord créé le répertoire 'db'.

Assurez-vous que votre répertoire/tmp est accessible en écriture dans le monde (une cause improbable car une autre chose sur votre système ne fonctionnera pas non plus). ls/tmp -ald devrait produire drwxrwxrwt ....

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

Assurez-vous également que le fichier est présent là où vous vous attendez.

74
John

J'ai fait face exactement au même problème. Voici mon cadre qui a fonctionné.

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

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

19
chhantyal

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

8
Daniel Roseman

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

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

5

Dans mon cas, le fichier sqlite db db.sqlite3 était stocké dans le DocumentRoot d'Apache. Donc, même après avoir défini les autorisations 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 quand j'ai déménagé db.sqlite3 dans un dossier nouvellement créé dbfolder sous DocumentRoot et a donné les autorisations ci-dessus, et cela a fonctionné.

3
learningloop

utilisez ce type cela fonctionne pour moi. Windows 7 avec python 2.7 et Django 1.5

'ENGINE': 'Django.db.backends.sqlite3',
'NAME': 'C:\\tool\\mysite\\data.db',

espérons que ses travaux ...

0
Yogendra Sharma