sqlite3.操作错误:无法打开数据库文件
我在设置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 个回答
你没有指定绝对路径,而是用了一个简写符号~
,在这个情况下可能不太管用。建议你直接使用/home/yourusername/Harold-Server/OmniCloud.db
这个完整路径。
我遇到的情况和你完全一样。下面是我用的设置,这个设置有效。
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/home/path/to/your/db/data.sqlite3'
如果你使用的是sqlite3,其他的设置都是一样的,或者是默认的设置。
另外,你需要创建一个叫做data.sqlite3的文件。
问题:你在使用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中指定的数据库路径是完整路径。
还要确保文件确实存在于你预期的位置。