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

时间:2011-10-06 04:25:20

标签: python database django sqlite 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.
}
}

7 个答案:

答案 0 :(得分:69)

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中指定的数据库路径已满   路径。

     

还要确保文件存在于您期望的位置。

答案 1 :(得分:19)

我遇到了完全相同的问题。这是我的设置。

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

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

答案 2 :(得分:8)

您尚未指定绝对路径 - 您使用的快捷方式~可能无法在此上下文中使用。请改用/home/yourusername/Harold-Server/OmniCloud.db

答案 3 :(得分:5)

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

在您的情况下,类似/home/harold/Harold-Server/OmniCloud.db

答案 4 :(得分:2)

我在使用 Apache 时遇到了这个问题,发现在我的 .env //// 中使用 sqlite3 数据库的绝对路径而不是使用相对路径 /// 解决了这个问题。上面提到的所有权限和所有权也是必要的。

答案 5 :(得分:1)

在我的例子中,sqlite db文件db.sqlite3存储在apache的DocumentRoot中。因此,即使在设置了以下权限之后,它也无法正常工作:

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 :(得分:0)

使用这种类型对我有用。  Windows 7与python 2.7和django 1.5

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

希望它的作品......