sqlite3.OperationalError:无法打开数据库文件

Chr*_*ris 41 python database sqlite django django-settings

在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.
}
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 75

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认同)

chh*_*yal 19

我遇到了完全相同的问题.这是我的设置工作.

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/path/to/your/db/data.sqlite3'
Run Code Online (Sandbox Code Playgroud)

sqlite3的其他设置将是相同/默认的.
而且您需要创建data.sqlite3.


Dan*_*man 8

您尚未指定绝对路径 - 您使用了快捷方式~,这可能在此上下文中不起作用.请/home/yourusername/Harold-Server/OmniCloud.db改用.


小智 5

您需要使用完整路径而不是~/

就您而言,类似/home/harold/Harold-Server/OmniCloud.db


lea*_*oop 5

在我的情况下,sqlite db 文件db.sqlite3存储在DocumentRootapache 中。因此,即使设置了以下权限,它也不起作用:

sudo chown www-data:www-data /path/to/db-folder
sudo chown www-data:www-data /path/to/db-folder/sqlite-db.db
Run Code Online (Sandbox Code Playgroud)

最后,当我移动db.sqlite3到新创建的文件夹dbfolderDocumentRoot,并给上述权限,和它的工作。