Sqlite3.OperationalError: невозможно открыть файл базы данных
Я получаю эту ошибку при настройке сервера в Django. Это sqlite3, что означает, что он должен создать файл .db, но, похоже, это не так. Я предусмотрел SQLite как бэкэнд и абсолютный путь к файлу для того, куда его поместить, но не повезло.
Является ли это ошибкой или я что-то неправильно делаю? (Просто думал, является ли абсолютный путь к файлу указанным по-разному в Ubuntu?)
Вот начало моего файла 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.
}
}
Ответы
Ответ 1
Django NewbieMistakes
ПРОБЛЕМА Вы используете SQLite3, ваш DATABASE_NAME настроен на полный путь к файлу базы данных, файл базы данных можно записать в Apache, но вы все равно получаете вышеуказанную ошибку.
РЕШЕНИЕ Убедитесь, что Apache также может записывать в родительский каталог базы данных. SQLite должен иметь возможность писать в этот каталог.
Убедитесь, что каждая папка полного пути к файлу базы данных не запускается с номером, например. /www/ 4myweb/db (наблюдается в Windows 2000).
Если для параметра DATABASE_NAME установлено что-то вроде '/Users/yourname/Sites/mydjangoproject/db/db', убедитесь, что вы сначала создал каталог "db".
Убедитесь, что ваш каталог /tmp доступен для записи в мире (маловероятная причина как другая вещь на вашей системе также не будет работать). ls/tmp -ald следует производят drwxrwxrwt....
Убедитесь, что путь к базе данных, указанный в settings.py, является полным путь.
Также убедитесь, что файл присутствует там, где вы ожидаете.
Ответ 2
Я столкнулся с такой же проблемой. Вот моя настройка, которая сработала.
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/path/to/your/db/data.sqlite3'
Другие настройки в случае sqlite3 будут одинаковыми/по умолчанию.
И вам нужно создать data.sqlite3.
Ответ 3
Вы не указали абсолютный путь - вы использовали ярлык ~
, который может не работать в этом контексте. Вместо этого используйте /home/yourusername/Harold-Server/OmniCloud.db
.
Ответ 4
Вам нужно использовать полный путь вместо ~/
.
В вашем случае что-то вроде /home/harold/Harold-Server/OmniCloud.db
.
Ответ 5
В моем случае файл 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
и дал указанные выше разрешения, и он сработал.
Ответ 6
используйте этот тип, он работает для меня.
windows 7 с python 2.7 и django 1.5
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'C:\\tool\\mysite\\data.db',
надеюсь, что его работы...