【问题标题】:sqlite3.OperationalError: unable to open database filesqlite3.OperationalError:无法打开数据库文件
【发布时间】:2011-12-01 23:41:22
【问题描述】:

在 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.
}
}

【问题讨论】:

  • 很遗憾原来的错误信息没有涵盖导致错误的文件名,这可能会有所帮助。

标签: python database django sqlite django-settings


【解决方案1】:

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 中指定的数据库路径是完整的 路径。

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

【讨论】:

  • 如何在 Linux 中通过命令行更改 Apache 的权限?
  • 您不更改 apache 的权限您更改文件和文件夹的权限,以便 Apache 可以在正确的位置读取和写入。这是 chmod catcode.com/teachmod 的指南,这是您在 linux 中更改权限的方法。虽然它应该只是 chmod +rw folder_name
  • 谢谢,“请确保您首先创建了 'db' 目录。”是一个很好的提示:-)
  • 约翰,如果我在你的城市,我欠你午餐。
  • chmod o+w . 在 DB 文件的文件夹中为我解决了这个问题。
【解决方案2】:

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

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

sqlite3 的其他设置将相同/默认。
你需要创建data.sqlite3。

【讨论】:

    【解决方案3】:

    您尚未指定绝对路径 - 您使用了快捷方式 ~,在这种情况下可能无法使用。请改用/home/yourusername/Harold-Server/OmniCloud.db

    【讨论】:

    • 用户名是服务器的名称,还是因为我以 root 身份登录,所以是 root?
    • 永远不要以 root 身份登录。为 Django 站点设置一个用户,或者使用 Apache 用户(通常是 www-data)。
    • 好的,我正在通过 ssh 访问 linode 服务器并添加了一个名为 Ned 的用户。所以我需要从 github 上提取 repo,然后在 Ned 上运行它?
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      在我的例子中,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 移动到DocumentRoot 下新创建的文件夹dbfolder 并授予上述权限时,它就起作用了。

      【讨论】:

      • 这对我来说非常适合 root 用户 - 使用烧瓶应用程序从项目目录中连接到数据库。发挥了作用 - 只需要让 apache 能够与 db 对话。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        使用这种对我有用的类型。 带有 python 2.7 和 django 1.5 的 windows 7

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

        希望它的作品...

        【讨论】:

          猜你喜欢
          • 2011-06-05
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          • 2012-10-04
          • 2011-11-10
          • 2013-05-02
          • 1970-01-01
          相关资源
          最近更新 更多