为什么我会收到 sqlite 错误“无法打开数据库文件”?

为什么我会收到 sqlite 错误“无法打开数据库文件”?

使用我的 Django 应用程序,我可以很好地从数据库中读取数据。当应用程序没有权限访问该文件时,它给了我这个错误:

尝试写入只读数据库

这很有道理。所以我编辑了文件的权限,以便 Apache 进程具有写入权限。但是,它不但不能写入,还出现了这个神秘的错误:

无法打开数据库文件

如果有用的话,这里是整个输出:

Request Method: POST
Request URL:    http://home-sv-1/hellodjango1/polls/1/vote/
Exception Type: OperationalError
Exception Value:    
unable to open database file
Exception Location: /usr/lib/pymodules/python2.5/django/db/backends/sqlite3/base.py in execute, line 193
Python Executable:  /usr/bin/python
Python Version: 2.5.2
Python Path:    ['/var/www', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/pymodules/python2.5', '/usr/lib/pymodules/python2.5/gtk-2.0']
Server time:    Sun, 23 Aug 2009 07:06:08 -0500

如果需要堆栈跟踪,请告诉我。

答案1

啊哈,刚刚偶然发现一篇文章解释这一点。Django 也有关于他们的信息新手错误页。

解决方案是确保包含数据库文件的目录也具有允许该进程的写访问权限。

就我而言,运行此命令可以解决问题:

sudo chown www-data .

答案2

我对此的解决方案更像是这样的。我并不是真的想改变这个目录的所有权。(主要是因为我使用 pi 用户来做 git 之类的事情)

/var/www/mysite $ ls -la sql*
-rw-rw-r-- 1 pi       pi       25600 Jan  2 22:57 sqlite.db

(或者你正在使用的任何数据库)

其中 pi 是我创建所有文件的用户。(是的,这是树莓派)

我发现我只需要更改如下权限,而不需要更改 www-data 的权限:

sudo chmod 775 /var/www/mysite
sudo chmod 664 /var/www/mysite/sqlite.db
sudo usermod -a -G pi www-data

这授予组对必要文件的写权限,并将 www-data 用户添加到 pi 组。

注意:如果您有日志记录,您也需要对 django 日志文件执行此操作,否则 apache 不会喜欢它。

答案3

来自使用 SQLite3 时,Django 显示“无法打开数据库文件” 部分新手错误Django 维基

  1. 确保 Apache 也可以写入数据库的父目录
  2. 确保数据库文件的完整路径中的任何文件夹都不以数字开头
  3. 确保db目录的完整路径存在
  4. 确保您的/tmp目录是全球可写的
  5. 确保指定的数据库路径settings.py是完整路径
  6. 确保路径中没有特殊字符
  7. 在 Windows 上,确保数据库目录路径用双反斜杠书写

答案4

解决方案是确保包含数据库文件的目录也具有允许该进程的写访问权限。

为了视窗7、8.1、10、Server 2012 等请遵循Bonobo 安装说明

允许 IIS 用户修改 C:\inetpub\wwwroot\Bonobo.Git.Server\App_Data 文件夹。

要做到这一点:

  1. 选择 App_Data 文件夹的属性,
  2. 进入“安全”选项卡,
  3. 点击编辑,
  4. 选择 IIS 用户(在我的情况下是 IIS_IUSRS)并添加修改和写入权限,
  5. 使用“应用”按钮确认这些设置。

相关内容