2010-07-19 6 views
32

после запуска «python manage.py syncdb». Я получаю сообщение об ошибке «невозможно открыть файл базы данных».Django «не может открыть файл базы данных»

здесь является важной частью моего settings.py:

DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = 'apps.db'  # Or path to database file if using sqlite3. 
DATABASE_USER = ''    # Not used with sqlite3. 
DATABASE_PASSWORD = ''   # Not used with sqlite3. 
DATABASE_HOST = ''    # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = ''    # Set to empty string for default. Not used with sqlite3. 

и вот разрешения для "apps.db":

-rw-r--r-- 1 root root 33792 19. Jul 10:51 apps.db 

Мой Джанго сервер вызывается из апача .. Я не знаю, связано ли это с разрешениями, но изменение владельца apps.db на «www-data» не работает ни

для обеспечения WWW-данных может получить доступ ко всем этим я сделал следующее:

сделал следующее:

chown -R www-data apps 
rm apps.db 
su www-data 
python manage.py syncdb 

, но он по-прежнему не работает :(

+0

Убедитесь, что WWW-данные могут пройти весь путь к БД, а не просто читать/напишите файл db. –

ответ

16

я решил ошибку, изменив DATABASE_NAME до абсолютного пути: /var/www/apps/apps.db.

На машине для окон, обратная косая черта должна быть экранирована как: C:\\path\\to\\database\\database_name.db.

+0

Что делать, если я пытаюсь получить доступ к базе данных по сети, и путь начинается с «\\ MyMachine \ ...», что переводится как «\\\\ MyMachine \\ ...». Тогда я не могу открыть соединение, я получаю «невозможно открыть файл базы данных». Даже если база данных находится на моей машине, я просто пытаюсь получить к ней доступ по-другому. – gajo357

45

Solution from NewbieMistakes

Убедитесь, что Apache может также записать в родительский каталог базы данных . SQLite должен иметь возможность писать в этот каталог.

Убедитесь, что в каждой папке полного пути файла базы данных не запускается с номером, например./www/4myweb/db (наблюдается в Windows 2000).

Если DATABASE_NAME установлен на что-то вроде '/ Users/ВашеИмя/Sites/mydjangoproject/DB/DB', убедитесь, что вы первым создал каталог '' дб.

Убедитесь, что ваш каталог/tmp доступен для всего мира (маловероятная причина, поскольку другая вещь в вашей системе также не работает). ls/tmp -ald должен произвести drwxrwxrwt ....

Убедитесь, что путь к базе данных, указанный в settings.py, представляет собой полный путь .

+14

Разрешение родительского каталога было неочевидным (для меня); Благодарю. –

+1

Здесь есть запись в FAQ [здесь] (https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3). – m01

3

DATABASE_NAME устарел. Вы должны использовать поддерживаемый в настоящее время формат. т.е.

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': 'C:/ispdb.sqlite', 
    'USER': '', 
    'PASSWORD': '', 
    'HOST': '', 
    'PORT': '' 

} 

А также и другие параметры, которые устаревшее с сайта Джанго. :))

1

Ну, я ответил на этот вопрос. http://goo.gl/KAuXz

Я столкнулся с такой же проблемой. Вот моя настройка, которая сработала.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/neo/django/db/data.sqlite3' 

Другие настройки в случае sqlite3 будут одинаковыми/стандартными.

2

Для моей системы Linux, я должен был дать разрешение на запись процесса владельца как с db.sqlite3 и каталог, который содержал его! Вы могли бы просто setfacl вместо этого! пример: (https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting).

(py2.7) [меня @ сервер djangoproject-контейнер] $ Ls -la djangoproject/

drwxrwxr-x. 6 root nginx 4096 Jun 14 01:05 . 
drwxr-xr-x. 6 root root 4096 Jun 13 23:47 .. 
-rwxrwxrwx. 1 root nginx 49152 Jun 14 01:05 db.sqlite3 
Смежные вопросы