sqlite3.OperationalError: невозможно открыть файл базы данных - PullRequest
41 голосов
/ 06 октября 2011

Я получаю эту ошибку при настройке сервера в Django. Это sqlite3, что означает, что он должен создать файл .db, но, похоже, он этого не делает. Я указал SQLite как бэкэнд и абсолютный путь к файлу, где его разместить, но не повезло.

Это ошибка или я что-то делаю неправильно? (Просто подумал, абсолютный путь к файлу указан по-другому в Ubuntu?)

Вот начало моего файла 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.
}
}

Ответы [ 6 ]

71 голосов
/ 06 октября 2011

Django NewbieMistakes

ПРОБЛЕМА Вы используете SQLite3, для вашего DATABASE_NAME задан полный путь к файлу базы данных, файл базы данных доступен для записи Apache, но вы все равно получаетевышеуказанная ошибка.

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

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

Если для DATABASE_NAME установлено что-то вроде '/ Users / yourname / Sites / mydjangoproject / db / db', убедитесь, что вы создали 'db'directory first.

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

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

Также убедитесь, что файл присутствует там, где выожидайте, что это будет.

19 голосов
/ 28 июня 2012

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

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

Другие настройки в случае sqlite3 будут такими же / по умолчанию.
И вам нужно создать data.sqlite3.

8 голосов
/ 06 октября 2011

Вы не указали абсолютный путь - вы использовали ярлык, ~, который может не работать в этом контексте. Вместо этого используйте /home/yourusername/Harold-Server/OmniCloud.db.

5 голосов
/ 09 августа 2013

Вам нужно использовать полный путь вместо ~/.

В вашем случае что-то вроде /home/harold/Harold-Server/OmniCloud.db.

3 голосов
/ 26 апреля 2015

В моем случае файл sqlite db db.sqlite3 хранился в DocumentRoot apache.Таким образом, даже после установки следующих разрешений это не сработало:

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

Наконец, когда я переместил db.sqlite3 во вновь созданную папку dbfolder в DocumentRoot и дал вышеуказанные разрешения, и этоработал.

0 голосов
/ 30 мая 2013

используйте этот тип, он работает для меня. Windows 7 с Python 2,7 и Django 1,5

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

надеюсь, что это работает ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...