sqlite3.OperationalError: не удается открыть файл базы данных

#python #database #django #sqlite #django-settings

#python #База данных #django #sqlite #django-настройки

Вопрос:

Я получаю эту ошибку при настройке сервера в 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.
}
}
  

Комментарии:

1. Как жаль, что исходное сообщение об ошибке не содержит имени файла, которое вызывает ошибку, это могло бы немного помочь.

Ответ №1:

Django NewbieMistakes

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

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

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

Если для имени базы ДАННЫХ задано что-то вроде ‘/Users/yourname/Sites/mydjangoproject/db/ db’, сначала убедитесь, что вы создали каталог ‘db’.

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

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

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

Комментарии:

1. Как мне изменить разрешения Apache через командную строку в Linux?

2. Вы не меняете разрешения apache, вы меняете разрешения файла и папки, чтобы Apache мог читать и записывать в нужных местах. Вот руководство по chmod catcode.com/teachmod именно так вы меняете разрешения в Linux. хотя это должно быть просто chmod rw folder_name

3. Спасибо, «сначала убедитесь, что вы создали каталог ‘db'». это очень хороший намек 🙂

4. Джон, если я когда-нибудь буду в твоем городе, я должен тебе обед.

5. chmod o w . в папке файла DB это исправлено для меня.

Ответ №2:

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

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

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

Ответ №3:

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

Комментарии:

1. будет ли имя пользователя именем сервера или, поскольку я вошел в систему как root, root?

2. Никогда не входите в систему от имени пользователя root. Настройте пользователя для сайта Django или используйте пользователя Apache (обычно www-data).

3. Хорошо, я обращаюсь к серверу linode через ssh и добавил пользователя с именем Ned. Итак, мне нужно извлечь репозиторий из github, а затем запустить его на Ned?

Ответ №4:

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

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

Ответ №5:

В моем случае файл базы данных sqlite 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 и предоставил вышеуказанные разрешения, и это сработало.

Комментарии:

1. Это отлично сработало для меня от пользователя root — используя приложение flask для подключения к БД из каталога проекта. Сработал шарм — просто нужно, чтобы apache мог общаться с БД.

Ответ №6:

У меня была эта проблема с Apache, и я обнаружил, что использование абсолютного пути к базе данных sqlite3 в my .env //// в отличие от использования относительного пути /// устранило проблему. Все разрешения и права собственности, упомянутые выше, также необходимы.

Ответ №7:

используйте этот тип, он работает для меня. windows 7 с python 2.7 и django 1.5

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

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