django中“无法打开数据库文件”

时间:2014-01-11 08:21:01

标签: python django

我在django中遇到了sqlite3的问题。这是我第一次使用它。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/home/djangobook/mydb.db',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 324, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 306, in _cursor
    self._sqlite_create_connection()
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/sqlite3/base.py", line 296, in _sqlite_create_connection
    self.connection = Database.connect(**kwargs)
OperationalError: unable to open database file

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您尚未运行syncdb

进入与manage.py相同级别的应用程序文件夹,在控制台中运行:

python manage.py syncdb 

为了更好地理解django,请按照tutorial的方式编写对文件夹的访问权限。

答案 1 :(得分:2)

您需要对/ home / djangobook /目录和/home/djangobook/mydb.db文件(存在)的写访问权。

如果/home/djangobook/mydb.db文件不存在,则需要运行@ user1788781指向的python manage.py syncdb。

答案 2 :(得分:1)

我快速回答,因为在使用Graphite部署时,还有另外一种可能性让我感到震惊(石墨的Web UI是httpd + django)。 即使您配置了完整路径,db文件和目录上的权限也都可以,您可能有Selinux Enforcing。

如果您需要selinux强制执行,抱歉,我现在无法提供有关如何使此设置正常工作的详细信息,但如果意外启用,请执行以下操作:

root # getenforce
Enforcing
root # setenforce 0
root # getenforce
Permissive

一个提示,更深入地调试此问题并确认这是与您可以使用strace的权限相关的问题:

$ sudo service httpd stop
$ sudo strace -f service httpd start 2>&1 | tee tmp.log

# strace log could contain something similar to the following:
$ grep mydb.db tmp.log 
.... stat("/home/djangobook/mydb.db", 0x7fff55023b80) = -1 EACCES (Permission denied)
.... open("/home/djangobook/mydb.db", O_RDWR|O_CREAT, 0644) = -1 EACCES (Permission denied)