sqlite3.操作错误:无法打开数据库文件

64 投票
8 回答
212973 浏览
提问于 2025-04-17 03:46

我在设置Django服务器的时候遇到了这个错误。它提到的是sqlite3,这意味着应该创建一个.db文件,但似乎并没有成功。我已经指定了SQLite作为数据库的后端,并且给出了一个绝对路径来放这个文件,但还是没有成功。

这是个bug还是我哪里做错了?(我在想,绝对路径在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.
}
}

8 个回答

11

你没有指定绝对路径,而是用了一个简写符号~,在这个情况下可能不太管用。建议你直接使用/home/yourusername/Harold-Server/OmniCloud.db这个完整路径。

21

我遇到的情况和你完全一样。下面是我用的设置,这个设置有效。

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

如果你使用的是sqlite3,其他的设置都是一样的,或者是默认的设置。
另外,你需要创建一个叫做data.sqlite3的文件。

88

Django 新手常犯错误

问题:你在使用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中指定的数据库路径是完整路径。

还要确保文件确实存在于你预期的位置。

撰写回答