【问题标题】:django.db.utils.OperationalError: unable to open database filedjango.db.utils.OperationalError:无法打开数据库文件
【发布时间】:2017-04-18 23:10:27
【问题描述】:

当我跑步时

python manage.py runserver

我收到此错误

文件“/usr/local/lib/python2.7/dist-packages/Django-1.10.1-py2.7.egg/django/db/backends/sqlite3/base.py”,第 209 行,在 get_new_connection conn = Database.connect(**conn_params) django.db.utils.OperationalError: 无法打开数据库文件

我的设置.py:

DATABASES = {
    'default': dj_database_url.config(
        default="sqlite:///{}".format(
            os.path.join(BASE_DIR, 'db/db.sqlite3')
        )
    )
}

【问题讨论】:

    标签: django


    【解决方案1】:

    基本上有两个答案,运行服务器的用户无权打开数据库文件。 您可以尝试通过以下方式解决此问题:

    sudo chown $(whoami):$(whoami) /path/to/dir/db/db.sqlite3
    

    或者你没有这个文件,你可以通过应用迁移命令来创建它:

    ./manage.py migrate
    

    【讨论】:

    • 你能检查一下 os.path.join(BASE_DIR, 'db/db.sqlite3') 和你的路径是否相等吗?
    【解决方案2】:

    同样的问题困扰了一段时间,我相信我终于找到了解决方案!

    sudo python manage.py runserver
    

    这对我有用。

    我的权限告诉我一切都应该是这样。无论如何,我仍然必须在终端的命令开头输入 sudo

    【讨论】:

    • 当 Django 使用 mod_wsgi 部署在 apache 服务器上时,这只能在开发中完成,对生产没有帮助
    • 根本没有帮助。我的用户能够访问数据库。最好检查权限而不是使用 root 帐户。
    【解决方案3】:

    我遇到了同样的问题,刚刚解决了。确保 www-data(或任何运行您的 Web 服务器的守护程序)可以访问 db.sqlite3 文件及其路径。所以:

    sudo chown :www-data <project_folder>/
    sudo chown :www-data <project_folder>/db.sqlite3
    sudo chmod 664 <project_folder>/db.sqlite3
    

    【讨论】:

      【解决方案4】:

      @whinytween96 :当sudo 用于运行某些命令而不是用于其他命令时,我看到这个问题发生得更多。您需要与sudo 的用法保持一致才能解决此问题。我遇到了数据库问题,我通过再次运行带有 sudo 前缀的命令来修复它。

      1. sudo python manage.py runserver
      2. sudo python manage.py makemigrations
      3. sudo python manage.py migrate

      帮我解决了这个问题。

      【讨论】:

        【解决方案5】:

        只需删除 settings.py 文件中的第一个 db。

        如果您删除第一个db,您将拥有os.path.join(BASE_DIR, 'db/db.sqlite3'),您将拥有os.path.join(BASE_DIR, 'db.sqlite3')

        您的数据库设置将是

        DATABASES = {
            'default': dj_database_url.config(
                default="sqlite:///{}".format(
                    os.path.join(BASE_DIR, 'db.sqlite3')
                )
            )
        }
        

        【讨论】:

          【解决方案6】:

          对我来说,问题在于我有两个设置文件;一种用于生产,一种用于开发。在我的 manage.py 中,我指定了部署设置文件并忘记将 manage.py 添加到我的 .gitignore 中,所以当我在本地运行项目时,它在尝试查找生产数据库时失败了。

          【讨论】:

            【解决方案7】:

            致任何 WINDOWS 用户:

            我在创建我的第一个 django 项目时遇到了同样的错误。我无法在 Windows 上使用 sudo,因此命令 python manage.py runserver 仅在我以管理员身份运行终端时才有效。

            【讨论】:

              【解决方案8】:

              如果您在 AWS EC2 节点上遇到此问题并使用 apache,我必须解决此问题:

              chown -R apache:apache project_folder
              

              【讨论】:

                【解决方案9】:

                我也有类似的问题。

                您只需使用 sudo 运行命令

                sudo python3 manage.py runserver
                

                享受吧!

                【讨论】:

                  【解决方案10】:

                  对于许多用户(比如我自己),他们在使用另一个数据库引擎时可能会遇到此错误,但已通过您的环境变量调用将默认引擎设置为 sqllite3,您可能希望删除该默认值或检查您正在检查的 env 变量在 .env 文件中的命名方式相同。

                  菜鸟的错误,但很好,

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-11-11
                    • 2014-08-30
                    • 2011-03-17
                    • 2012-06-08
                    • 2018-02-22
                    • 2018-07-07
                    相关资源
                    最近更新 更多