我在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
感谢您的帮助。
答案 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)